我有这个正则表达式
\[.+\]\(.+\)
为什么它完全匹配这个字符串?
[test1](test1) thisbitshouldnotmatch [test2](test2)
Run Code Online (Sandbox Code Playgroud)
它应该只匹配[test1](test1)和[test2](test2).thisbitshouldnotmatch不应该匹配.
那是因为+操作员贪婪.
对于表达式\[.+\]\(.+\),字符匹配如下:
[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 )
试试这个表达式:
\[.+?\]\(.+?\)
Run Code Online (Sandbox Code Playgroud)
这将限制结果,因此它只匹配第一次出现的[]和().请注意,默认情况下,表达式如下:.+将尽可能多地匹配输入.通过?在末尾添加量词:.+?我们指定搜索应该在它找到的第一个匹配处停止.
| 归档时间: |
|
| 查看次数: |
5083 次 |
| 最近记录: |