单词边界不会正则表达式[复制]工作的括号内(Word boundary does not work

2019-09-28 06:34发布

这个问题已经在这里有一个答案:

  • 正则表达式字括号内的边界替代不起作用? 1个回答

我已经注意到了字边界\bword\b做时不会括号内工作preg_replace()在PHP。

具体来说,我想排除的全称> (其代表>在HTML),但是由于字边界不触发括号内为[^\b>\b]任何由本身的那些字符,等的g& ,将作为非匹配来检测。 如果你尝试做括号外的匹配, \b将按预期在PHP即使这个词用开始&一个非字符。

任何想法/想法来解决这种情况呢?

Answer 1:

在PHP中排除,(* SKIP)(* F)是你的朋友

在PHP中,不包括任何吓人简单得益于强大的(*SKIP)(*F)语法(Perl中也可)。

为了排除> 看着别的东西,你可以这样做:

>(*SKIP)(*F)|something_else

交替的左侧| 匹配完整> 然后故意失败,在此之后,发动机跳到串中的下一个位置。 右侧匹配something_else ,我们知道它是不是> 因为它不是由左边的表达式匹配。 只要确保something_else是不是通用的,如.*因为这可能滚过以下所有> 实例。 举例来说,在这里, \w+将是一个完美的精细图案something_else ,因为它不与冲突>

进一步阅读有关这和其他技术排除在正则表达式模式

如何匹配(或替换)的模式,除了在情况S1,S2,S3 ...



Answer 2:

一个解决方案是我自己的问题是:不是做[^word]条件,检查单词/句子我想是不是紧跟着,我不想这个词。 如:

>(?!>)

对于我的具体情况,它的工作。



文章来源: Word boundary does not work inside brackets in regex [duplicate]