我不懂正则表达式

Fla*_*tef 2 regex regex-greedy

我正在使用一个使用正则表达式从字符串中删除所有html标记的教程(Ruby):

product.description.gsub(/<.*?>/,'').

我不知道怎么解释?.这是否意味着:"至少有一个以前的"?在那种情况下,会不会/<.+>/更充足?

Kob*_*obi 8

在这种情况下,它会变得*懒惰.

1*- 匹配尽可能多的1s.
1*?- 尽可能少地匹配1.

在这里,当你有<a>text<b>some more text,<.*>将匹配<a>text<b>.
<.*?>然而,将匹配<a><b>.

另见:懒惰而不是贪婪

另一个重要的注意事项是,这个正则表达式很容易在有效的HTML上失败,最好使用HTML解析器,并获取文档的文本.


Mar*_*ers 6

默认情况下.*贪婪的,这意味着它尽可能匹配.因此,.*更换将改变:

This <b>is</b> an <i>example</i>.
     ^-------------------------^

This .

如果你量词之后使用问号,那么它就会变得非贪婪,所以它尽可能地匹配.随着.*?替换工作原理如下:

This <b>is</b> an <i>example</i>.
     ^-^  ^--^    ^-^       ^--^

变为:

This is an example.

这与?量词的更常见用法不同,它意味着"匹配零或一".

无论哪种方式,如果您的文本是HTML,您应该使用HTML解析器而不是正则表达式.