我正在关注使用正则表达式从字符串中删除所有 html 标记的教程(Ruby):
product.description.gsub(/<.*?>/,'').
我不知道如何解释?. 这是否意味着:“至少以前的一个”?那样的话,岂不/<.+>/是更合适了?
我正在关注使用正则表达式从字符串中删除所有 html 标记的教程(Ruby):
product.description.gsub(/<.*?>/,'').
我不知道如何解释?. 这是否意味着:“至少以前的一个”?那样的话,岂不/<.+>/是更合适了?
在这种情况下,它会变得*懒惰。
1*- 匹配尽可能多1的 s。
1*?- 匹配尽可能少1的 s。
在这里,当您拥有 时<a>text<b>some more text,<.*>将匹配<a>text<b>。
<.*?>但是,将匹配<a>和<b>。
另请参阅:懒惰而不是贪婪
这里的另一个重要注意事项是,这个正则表达式很容易在有效的 HTML 上失败,最好使用 HTML 解析器,并获取文档的文本。
默认情况下.*是贪婪的,这意味着它尽可能匹配。所以随着.*替换会改变:
这<b>是</b>一个<i>例子</i>。
^----------------------^
到
这 。
如果你在量词之后使用问号,它会使其不贪婪,从而尽可能少地匹配。更换.*?工作如下:
这<b>是</b>一个<i>例子</i>。
^-^ ^--^ ^-^ ^--^
变成:
这是一个例子。
?这与作为量词的更常见用法不同,后者表示“匹配零或一”。
无论哪种方式,如果您的文本是 HTML,您应该使用 HTML 解析器而不是正则表达式。
默认情况下,诸如此类的量词*是贪婪的。这意味着它们尽可能匹配。在它们之后添加?会使它们变得懒惰,因此它们会尽快停止匹配。