我正在使用一个使用正则表达式从字符串中删除所有html标记的教程(Ruby):
product.description.gsub(/<.*?>/,'')
。
我不知道如何解释?
。这是否意味着:“至少有一个以前的”?在这种情况下,/<.+>/
不会更充足吗?
答案 0 :(得分:8)
在这种情况下,它使*
懒惰。
1*
- 尽可能多地匹配1
个。{
1*?
- 尽可能少匹配1
。
此处,当您<a>text<b>some more text
时,<.*>
将与<a>text<b>
匹配
但是,<.*?>
会匹配<a>
和<b>
。
另请参阅:Laziness Instead of Greediness
这里的另一个重要注意事项是,这个正则表达式很容易在有效的HTML上失败,最好使用HTML解析器,并获取文档的文本。
答案 1 :(得分:6)
默认情况下,.*
为greedy,这意味着它尽可能匹配。因此,.*
替换将更改:
This <b>is</b> an <i>example</i>. ^-------------------------^
到
This .
如果在量词之后使用问号,则会使其非贪婪,以便尽可能少地匹配。使用.*?
替换工作如下:
This <b>is</b> an <i>example</i>. ^-^ ^--^ ^-^ ^--^
变为:
This is an example.
这与?
作为量词的更常见用法不同,它意味着'匹配零或一个'。
无论哪种方式,如果您的文本是HTML,您应该使用HTML解析器而不是正则表达式。
答案 2 :(得分:0)
默认情况下,*
等量词是贪婪的。这意味着它们尽可能匹配。在它们之后添加?
会使它们变得懒惰,因此它们会尽快停止匹配。
答案 3 :(得分:0)