Poi*_*ull 315 regex non-greedy regex-greedy
我需要有关非贪婪选项的正则表达式匹配的帮助.
匹配模式是:
<img\s.*>
Run Code Online (Sandbox Code Playgroud)
要匹配的文字是:
<html>
<img src="test">
abc
<img
src="a" src='a' a=b>
</html>
Run Code Online (Sandbox Code Playgroud)
此表达式匹配从<img
最后到的所有文本>
.我需要它与>
初始后遇到的第一个匹配<img
,所以在这里我需要得到两个匹配而不是我得到的匹配.
我尝试了所有非贪婪的?
组合,没有成功.
Pav*_*ath 438
非贪婪的?
作品非常好.它只是你需要选择点匹配所有的正则表达式引擎选项(regexpal,你所使用的引擎,也有这个选项),你与测试.这是因为,使用时,正则表达式引擎通常不会与换行符匹配.
.您需要明确告诉他们您也希望匹配换行符.
例如,
<img\s.*?>
Run Code Online (Sandbox Code Playgroud)
工作良好!
此外,阅读关于如何点表现在不同的正则表达式的口味.
Ily*_*lya 71
该?
操作使匹配非贪婪.例如.*
贪婪而.*?
不是贪婪.所以你可以使用类似<img.*?>
匹配整个标签的东西.或者<img[^>]*>
.
但请记住,整个HTML集实际上无法使用正则表达式进行解析.
这里的其他答案以您有一个支持非贪婪匹配的正则表达式引擎为前提,该引擎是Perl 5中引入的扩展,并且已广泛复制到其他现代语言中。但这绝不是普遍存在的。
许多较旧或更保守的语言和编辑器仅支持传统的正则表达式,而传统的正则表达式没有控制重复运算符贪婪性的机制*
-它始终与最长的字符串匹配。
然后,诀窍是首先限制允许匹配的内容。而不是.*
你似乎在寻找
[^>]*
Run Code Online (Sandbox Code Playgroud)
仍然匹配尽可能多的东西;但是这些东西不仅是.
“任何字符”,还包括“不是”的任何字符>
。
根据您的应用程序,您可能会或可能不希望启用允许“任何字符”包括换行符的选项。
即使您的正则表达式引擎支持非贪婪匹配,也最好阐明您的实际意思。如果这是您的意思,那么您可能应该这样说,而不是依靠非贪婪的匹配来(希望是,也许是)做到我的意思。
例如,正则表达式与通配符等之后尾随方面.*?><br/>
将跳过任何嵌套>
,直到它找到尾随上下文(这里><br/>
),即使需要跨越多个>
实例和换行,如果你让它,其中[^>]*><br/>
(甚至[^\n>]*><br/>
如果你有明确禁止换行)显然不能也不会这样做。
当然,如果您需要解决的话,这仍然不是您想要的<img title="quoted string with > in it" src="other attributes"> and perhaps <img title="nested tags">
,但是到那时,您最终应该放弃使用正则表达式,就像我们一开始就告诉您的那样。
归档时间: |
|
查看次数: |
308176 次 |
最近记录: |