在正则表达式中括号内的字边界不起作用

时间:2014-06-17 06:29:11

标签: php regex word brackets boundary

我注意到在PHP中执行\bword\b时,边框preg_replace()一词在括号内不起作用。

具体来说,我正在尝试排除完整的单词>(代表HTML中的>),但由于单词边界不会像[^\b>\b]中那样在括号内触发,任何这些字符本身(如g&)都会被检测为不匹配。如果您尝试在括号外进行匹配,\b在PHP中按预期工作,即使单词以&非字符开头。

有什么想法/想法来解决这种情况吗?

2 个答案:

答案 0 :(得分:1)

要在PHP中排除,(*跳过)(* F)是您的朋友

在PHP中,由于强大的(*SKIP)(*F)语法(在Perl中也可用),排除任何内容都非常简单。

要排除>并观看其他内容,您可以这样做:

>(*SKIP)(*F)|something_else

交替|的左侧匹配完成>然后故意失败,之后引擎跳到字符串中的下一个位置。右侧与something_else匹配,我们知道它不是>,因为它与左侧的表达式不匹配。只需确保something_else不是通用的,例如.*,因为它可能会覆盖以下所有>个实例。例如,\w+ something_else对于>来说是完美的模式,因为它不会与{{1}}冲突

进一步阅读有关排除正则表达式中模式的此方法和其他技巧

How to match (or replace) a pattern except in situations s1, s2, s3...

答案 1 :(得分:0)

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

>(?!>)

就我的具体情况而言,它有效。