正则表达式连续两个特殊字符

Jam*_*mes 5 regex

我有这个正则表达式 \[.+\]\(.+\)

为什么它完全匹配这个字符串?

[test1](test1) thisbitshouldnotmatch [test2](test2)
Run Code Online (Sandbox Code Playgroud)

它应该只匹配[test1](test1)[test2](test2).thisbitshouldnotmatch不应该匹配.

que*_*atl 7

那是因为+操作员贪婪.

对于表达式\[.+\]\(.+\),字符匹配如下:

[test1](test1) thisbitshouldnotmatch [test2](test2)
[..........................................](.....)
Run Code Online (Sandbox Code Playgroud)

所以,整个输入匹配!

你需要使用nongreedy:

\[.+?\]\(.+?\)
Run Code Online (Sandbox Code Playgroud)

或者,显性不允许某些字符

\[[^\]]+\]\([^)]+\)
Run Code Online (Sandbox Code Playgroud)

(注意我是如何.用一个排除])分别排除的字符组替换catch-any )


Ósc*_*pez 5

试试这个表达式:

\[.+?\]\(.+?\)
Run Code Online (Sandbox Code Playgroud)

这将限制结果,因此它只匹配第一次出现的[]().请注意,默认情况下,表达式如下:.+将尽可能多地匹配输入.通过?在末尾添加量词:.+?我们指定搜索应该在它找到的第一个匹配处停止.