模式:
(test):(thestring)
只有在test:
之前,我想要的是完全匹配的
test:thestring
但是在这种情况下,不会完全匹配:
test:test:thestring
我已经尝试过限定词,但是没有用。
需要帮助
答案 0 :(得分:2)
尝试以下模式:^(?!.*((?(?<=^)|(?<=:))test(?=(:|$))).*(?1)).+$
。
主要部分是((?(?<=^)|(?<=:))test(?=(:|$)))
,如果它以冒号test
开头或在一行的开头,则与:
相匹配,后跟冒号:
或结尾
(?(?<=^)|(?<=:))
是(?<=(:|^))
的解决方法,但后视必须具有固定的长度。
然后,我们向后引用第一个捕获组(?1)
,以查看是否还有其他test
。
将整个模式放置在负前瞻(?!...)
中,以匹配所有与上述模式不匹配的内容(test
匹配多次)。
答案 1 :(得分:0)
对于这种非常特殊的情况:
(?<!.)(test:thestring)
它所做的只是搜索字符串test:thestring
,并确保它前面没有字符。 (使用MichałTurczyn的正则表达式进行通用搜索!)
答案 2 :(得分:0)
如果您希望完全匹配,并且应该只进行一次测试:在test:string之前,您可以断言字符串^
的开头,请使用否定的前行(?:(?!test:).)
来匹配任何字符,如果右侧没有测试:
然后匹配test:thestring
,后跟否定查找(?:(?!test:thestring).)*
,如果右边没有测试,则匹配任何字符:thestring并断言字符串$
的结尾>
^(?:(?!test:).)*test:thestring(?:(?!test:thestring).)*$