我正在寻找一个子字符串,例如test
,在一个较长的字符串,例如alongstringtest
。
在这个例子中,它将匹配ok
但是我想排除某些情况(当'test'前面有某些字符时)
。
不匹配'a-test'(因为'-')
不匹配'abcgtest'(因为'g')
不匹配'abc"test'(因为'"')
我很长时间没有写任何正则表达式了,所以这让我有点抓狂!
使用negative lookbehind:
(?<![-g"])test
最简单的答案是
/(?<![g"-])test/
但是如果你需要更多的性能,还有优化的空间。如果test
不能出现在字符串的最开始,那么从简单性和性能的角度来看,下面是一个明显的赢家:
/[^g"-]test/
否则,我会尝试以下操作:
/test(?<![g"-].{4})/s
/^test|[^g"-]test/
/^test/ || /[^g"-]test/
注意:-
可以在字符类中具有特殊含义,但如果它是第一个字符,否定^
后的第一个字符或最后一个字符则不具有特殊含义。我总是最后使用它;