我注意到在PHP中执行\bword\b
时,边框preg_replace()
一词在括号内不起作用。
具体来说,我正在尝试排除完整的单词>
(代表HTML中的>
),但由于单词边界不会像[^\b>\b]
中那样在括号内触发,任何这些字符本身(如g
或&
)都会被检测为不匹配。如果您尝试在括号外进行匹配,\b
在PHP中按预期工作,即使单词以&
非字符开头。
有什么想法/想法来解决这种情况吗?
答案 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]
条件,而是检查我想要的单词/句子是否而不是后面紧跟着“我不想”这个词想。如:
>(?!>)
就我的具体情况而言,它有效。