仅当捕获组遇到一次时才完全匹配
Full match only if the capturing group encountered once
模式:
(test):(thestring)
只要
之前只有一个test:
,我想要的就是全匹配
test:thestring
但在这种情况下不会有完全匹配:
test:test:thestring
我试过限定符,但没用。
需要帮助
试试这个模式:^(?!.*((?(?<=^)|(?<=:))test(?=(:|$))).*(?1)).+$
.
主要部分是((?(?<=^)|(?<=:))test(?=(:|$)))
,如果它前面有冒号:
或者在一行的开头后面有冒号:
,它匹配test
或行尾。
(?(?<=^)|(?<=:))
这是 (?<=(:|^))
的解决方法,但回顾必须具有固定长度。
然后我们对第一个捕获组(?1)
进行反向引用,看看是否还有其他test
.
将整个模式置于负前瞻 (?!...)
中,以匹配与上述模式不匹配的所有内容(test
匹配不止一次)。
对于这个非常具体的案例:
(?<!.)(test:thestring)
它所做的只是搜索字符串 test:thestring
并确保它之前没有字符。 (使用 Michał Turczyn 的正则表达式进行通用搜索!)
^((?!test:).)*(test:thestring)
如果你想要一个完整的匹配并且应该只有一个时间测试:在 test:string 之前你可以断言字符串的开头 ^
,使用否定先行 (?:(?!test:).)
如果右侧不是测试,则匹配任何字符:
然后匹配 test:thestring
后跟否定前瞻 (?:(?!test:thestring).)*
如果右侧不是 test:thestring 则匹配任何字符并断言字符串结尾 $
^(?:(?!test:).)*test:thestring(?:(?!test:thestring).)*$
模式:
(test):(thestring)
只要
之前只有一个test:
,我想要的就是全匹配
test:thestring
但在这种情况下不会有完全匹配:
test:test:thestring
我试过限定符,但没用。
需要帮助
试试这个模式:^(?!.*((?(?<=^)|(?<=:))test(?=(:|$))).*(?1)).+$
.
主要部分是((?(?<=^)|(?<=:))test(?=(:|$)))
,如果它前面有冒号:
或者在一行的开头后面有冒号:
,它匹配test
或行尾。
(?(?<=^)|(?<=:))
这是 (?<=(:|^))
的解决方法,但回顾必须具有固定长度。
然后我们对第一个捕获组(?1)
进行反向引用,看看是否还有其他test
.
将整个模式置于负前瞻 (?!...)
中,以匹配与上述模式不匹配的所有内容(test
匹配不止一次)。
对于这个非常具体的案例:
(?<!.)(test:thestring)
它所做的只是搜索字符串 test:thestring
并确保它之前没有字符。 (使用 Michał Turczyn 的正则表达式进行通用搜索!)
^((?!test:).)*(test:thestring)
如果你想要一个完整的匹配并且应该只有一个时间测试:在 test:string 之前你可以断言字符串的开头 ^
,使用否定先行 (?:(?!test:).)
如果右侧不是测试,则匹配任何字符:
然后匹配 test:thestring
后跟否定前瞻 (?:(?!test:thestring).)*
如果右侧不是 test:thestring 则匹配任何字符并断言字符串结尾 $
^(?:(?!test:).)*test:thestring(?:(?!test:thestring).)*$