我有这个正则表达式
\[.+\]\(.+\)
为什么它完全匹配这个字符串?
[test1](test1) thisbitshouldnotmatch [test2](test2)
它应该只匹配[test1](test1)和[test2](test2)。thisbitshouldnotmatch不应该匹配。
我有这个正则表达式
\[.+\]\(.+\)
为什么它完全匹配这个字符串?
[test1](test1) thisbitshouldnotmatch [test2](test2)
它应该只匹配[test1](test1)和[test2](test2)。thisbitshouldnotmatch不应该匹配。
那是因为+运营商是贪婪的。
对于表达式\[.+\]\(.+\),字符匹配如下:
[test1](test1) thisbitshouldnotmatch [test2](test2)
[..........................................](.....)
所以,整个输入匹配!
您需要使用非贪婪:
\[.+?\]\(.+?\)
或者,明确禁止某些字符
\[[^\]]+\]\([^)]+\)
(注意我如何用排除或分别.的字符组替换 catch-any )`])
试试这个表达式:
\[.+?\]\(.+?\)
这将限制结果,因此它只匹配 和 的第一次出现。请注意,默认情况下,像这样的表达式:将尝试匹配尽可能多的输入。通过在末尾添加一个量词:我们指定搜索应该在它找到的第一个匹配项处停止。[]().+?.+?
你需要让点变得懒惰,否则它会抓住它可以抓住的一切:
\[.+?]\(.+?\)
或者,更好的是,使用否定字符类,所以 a[后跟 manynot ]后跟 a]
\[[^]]++]\([^)]++\)
另请注意,您不需要逃避]