我正在搜索子字符串,例如test
,在较长的字符串中,例如alongstringtest
。
在此示例中,它将匹配ok
但我想排除某些情况(当'test'以某些字符开头时)
e.g。
不匹配'a-test'(因为' - ')
与'abcgtest'不匹配(因为'g')
不匹配'abc“test'(因为'”')
我很长时间没有写过任何正则表达式,所以这让我把头发拉出来了!
答案 0 :(得分:5)
(?<![-g"])test
答案 1 :(得分:2)
最简单的答案是
/(?<![g"-])test/
但如果您需要更高的性能,还有优化的空间。如果test
无法出现在字符串的最开头,则以下是简单性和性能方面的明显优势:
/[^g"-]test/
否则,我会尝试以下方法:
/test(?<![g"-].{4})/s
/^test|[^g"-]test/
/^test/ || /[^g"-]test/
注意:-
在字符类中具有特殊含义,但如果它是第一个字符,否定^
之后的第一个字符或最后一个字符则不会。我总是最后使用它;它让事情变得简单明了。