\ b表达式存在与特殊字符的单词不匹配的问题。
我有这个正则表达式
\bstr=flavor\b
我正在阅读有关转义特殊字符的信息,但不确定将其放置在何处。
我的目标是使正则表达式不匹配以下字符串
str=flavor%20sweet --> Shouldn't match (1)
str=flavorsweet --> shouldn't match (2)
declare str=flavor --> should match (3)
2和3已经可以使用当前的正则表达式,但是1存在问题,因为它仍然与应该考虑%
的地方相匹配
我应该如何更改我的正则表达式以使其将%视为字符?
答案 0 :(得分:0)
如果您的正则表达式引擎接受负前瞻,则可以使用:
\bstr=flavor\b(?!%)
强制紧靠str=flavor
后面的字符不是%
字符。
演示: https://regex101.com/r/kSmLzW/1
例如,您还可以在[ \t]*
字符周围添加=
以接受str = flavor
。
这给出了正则表达式:(\bstr[ \t]*=[ \t]*flavor\b(?!%)
)
对于JS
的旧版本,您可以使用:
\b(str=flavor)\b(?:[^%]|$)
演示:https://regex101.com/r/kSmLzW/2,如有必要,您可以在此处通过反向引用进行匹配。另外,如果您不想在%
顶部加上其他字符,则可以将它们添加到字符范围异常定义[^]