代码之家  ›  专栏  ›  技术社区  ›  Flavius Stef

我不懂regexp

  •  2
  • Flavius Stef  · 技术社区  · 14 年前

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

    我不知道怎么解释这个词 ? /<.+>/ 已经足够了吗?

    4 回复  |  直到 13 年前
        1
  •  8
  •   Kobi    14 年前

    在这种情况下,它使 * 懒惰。

    1* -匹配尽可能多的 1 越快越好。
    1*? 1

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

    另请参见: Laziness Instead of Greediness

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

        2
  •  6
  •   Mark Byers    14 年前

    .* greedy 这意味着它尽可能匹配。所以用 .*

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

    This .
    

    如果你用问号 之后 一个量词,它使它不贪婪,以便它匹配尽可能少。与 .*? 更换工作如下:

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

    变成:

    This is an example.
    

    这与更常见的 ? 作为量词,意思是“匹配零或一”。

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

        3
  •  0
  •   Daniel Egeberg    14 年前

    * 默认情况下是贪婪的。这意味着它们尽可能匹配。添加 ?

        4
  •  0
  •   Saher Ahwal    14 年前

    这是继regex库之后我发现的关于regex最好的网站:

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