我正在关注使用正则表达式从字符串中删除所有 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 解析器而不是正则表达式。
默认情况下,诸如此类的量词*
是贪婪的。这意味着它们尽可能匹配。在它们之后添加?
会使它们变得懒惰,因此它们会尽快停止匹配。