我正在尝试创建一个正则表达式来检查标签是否在文本中,但是有几个标签(来自数千个,不要问我为什么,SEO 专家告诉我的客户它很好)以括号结尾。
正则表达式非常适用于普通标签,但括号中的普通失败,因为匹配必须是精确的,所以我被迫使用词边界。有没有办法允许这样做?
这是我使用的原始正则表达式:
https://regex101.com/r/wN9jO8/1
这就是我尝试过的(是的,我不擅长正则表达式,但我尝试使用谷歌搜索并没有找到任何真正有用的东西):
https://regex101.com/r/wN9jO8/2
我也尝试修改单词边界,但它没有正常工作(总是在标签前后匹配一个字符串)。
基本上,对于标签 text (jadad)
:
lipsum is a dummy text (jadad) alsdasldk. // match
lipsum is a dummy text (jadad). // match
lipsum is a dummy text (jadad) // match
lipsum is a dummy (text (jadad)) // match
lipsum is a dummy text (jadad // should not match
lipsum is a dummy text jadad) // should not match
lipsum is a dummy text (jadad)asd // should not match
主要问题是,对于带括号和不带括号的标签,它必须完美地工作,理想情况下可以轻松编辑以支持标签中更多奇怪的字符([ 或 > 或以 . 或 ? 或 ! 结尾的标签)。
我现在真的很失落。如果您需要更多信息,请发表评论,我会尝试添加它。
感谢帮助。
最佳答案
您可以使用负前瞻 (?!\w)
(意味着下一个位置没有字符字符)。请注意,您不能使用 \b
,因为 \b
不能在被视为非单词字符的 )
之后断言:
\btext \(jadad\)(?!\w)
Updated Regex Demo
关于php - 正则表达式匹配带括号的词边界字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36702016/