猿问

我如何编写一个与非贪婪相匹配的正则表达式?

我如何编写一个与非贪婪相匹配的正则表达式?

我需要有关非贪婪选项的正则表达式匹配的帮助。

匹配模式是:

<img\s.*>

要匹配的文字是:

<html><img src="test">abc<img
  src="a" src='a' a=b></html>

我在http://regexpal.com上测试

此表达式匹配从<img最后到的所有文本>。我需要它与>初始之后遇到的第一个匹配<img,所以在这里我需要得到两个匹配而不是我得到的匹配。

我尝试了所有非贪婪的?组合,没有成功。


慕姐4208626
浏览 429回答 3
3回答

慕娘9325324

这里的其他答案预先假定你有一个支持非贪婪匹配的正则表达式引擎,这是Perl 5中引入的扩展并被广泛复制到其他现代语言中;&nbsp;但它绝不是无处不在的。许多较旧的语言和编辑器仅支持传统的正则表达式,它们没有控制重复运算符贪婪的机制*- 它总是匹配最长的字符串。然后,诀窍是限制首先允许匹配的内容。而不是.*你似乎在寻找[^>]*仍然匹配尽可能多的东西成为可能;&nbsp;但事物不仅仅是.“任何角色”,而是“任何不是”的角色>。根据您的应用程序,您可能希望也可能不希望启用选项以允许“任何字符”包含换行符。即使你的正则表达式引擎支持非贪婪匹配,最好说明你的实际意思。如果这就是你的意思,你应该这样说,而不是依靠非贪婪的匹配(希望,可能)Do Do I Mean。当然,如果你需要应对,这仍然不是你想要的<img title="quoted string with > in it" src="other attributes"> and perhaps <img title="nested tags">,但在这一点上,你应该最终放弃使用正则表达式,就像我们首先告诉你的那样。
随时随地看视频慕课网APP
我要回答