2

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

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

我不知道如何解释?. 这是否意味着:“至少以前的一个”?那样的话,岂不/<.+>/是更合适了?

4

4 回答 4

8

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

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

在这里,当您拥有 时<a>text<b>some more text<.*>将匹配<a>text<b>
<.*?>但是,将匹配<a><b>

另请参阅:懒惰而不是贪婪

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

于 2010-07-04T09:27:07.283 回答
6

默认情况下.*贪婪的,这意味着它尽可能匹配。所以随着.*替换会改变:

这<b>是</b>一个<i>例子</i>。
     ^----------------------^

这 。

如果你在量词之后使用问号,它会使其不贪婪,从而尽可能少地匹配。更换.*?工作如下:

这<b>是</b>一个<i>例子</i>。
     ^-^ ^--^ ^-^ ^--^

变成:

这是一个例子。

?这与作为量词的更常见用法不同,后者表示“匹配零或一”。

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

于 2010-07-04T09:30:56.230 回答
0

默认情况下,诸如此类的量词*是贪婪的。这意味着它们尽可能匹配。在它们之后添加?会使它们变得懒惰,因此它们会尽快停止匹配。

于 2010-07-04T09:28:54.873 回答
0

这是我在 regex 库之后找到的关于 regex 的最佳网站:

http://www.wellho.net/regex/java.html

希望有帮助!

于 2010-07-04T09:56:03.017 回答