【问题标题】:Regex selects first to last instead of just first正则表达式从第一个到最后一个而不是第一个
【发布时间】:2014-11-07 23:24:26
【问题描述】:

我正在尝试使用 String.sub!在红宝石中,它的替代品太多了。

我正在使用的正则表达式。你可以看到它匹配的太多了:http://rubular.com/r/IUav4KEFWH

<rb>.+<\/rb>

它从第一个到最后一个进行选择,我希望它只选择第一对。 是否有其他我不知道的 sub 版本,或者更好的 sub 方法

打开多行并将它们放在单独的行上很容易,但我不想牺牲多行

【问题讨论】:

  • 请将您的代码放入您的问题中。有链接也可以,但问题应该能够在断开的链接中幸存下来。

标签: html ruby regex tags rubular


【解决方案1】:

你可以试试这个变种:

<rb>(?>(?!<\/rb>).)*+<\/rb>

Demo

或者如果你愿意:

<rb>[^<]+<\/rb>

Demo

在这个DEMO 中查看.*?[^&lt;]+ 之间的区别

【讨论】:

    【解决方案2】:

    它匹配从第一个 &lt;rb&gt; 标记直到最后一个 &lt;/rb&gt; 标记,因为 + 是一个 greedy 运算符,这意味着它将尽可能匹配并且仍然允许正则表达式的其余部分匹配。

    您想使用+? 进行非贪婪匹配,意思是“一个或多个——最好尽可能少”。

    <rb>.+?</rb>
    

    注意:建议使用从 HTML 中提取的解析器,而不是使用正则表达式。

    【讨论】:

      【解决方案3】:

      你的正则表达式太贪心了:

      <rb>.+<\/rb>
      

      使用以下方法使其不贪婪:

      <rb>.+?<\/rb>
      

      Rubular Demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 2021-06-17
        • 2015-03-24
        • 2011-12-04
        相关资源
        最近更新 更多