【问题标题】:Regular expression in ruby to match the text between first occurrence and last occurrence of a characterruby 中的正则表达式匹配字符的第一次出现和最后一次出现之间的文本
【发布时间】:2014-06-07 05:27:34
【问题描述】:

谁能帮我在 ruby​​ 中形成一个正则表达式,以匹配字符第一次出现和最后一次出现之间的文本。

例如,对于字符-

ruby-on-rails 应该会得到结果 --> on

abc-def-ghi-jkl 应该得到结果 --> def-ghi

mnop-qrst-uvw-xyza-bc-defg-hij-123 应该得到结果 --> qrst-uvw-xyza-bc-defg-hij em>

感谢您的想法!

【问题讨论】:

  • -1 这个问题完全不清楚。 ruby-on-rails 中第一次出现和最后一次出现字符 (r) 之间的文本是 uby-on-。怎么变成on
  • 我通常不愿意编辑问题,宁愿离开 cmets,但这是一个需要编辑的示例,因为从示例中的意图非常清楚,但提问者可能是缺席了一段时间。谢谢,@Uri。

标签: ruby regex


【解决方案1】:

这个非常简单的正则表达式就可以了(因为* 运算符默认是贪婪的):

/-(.*)-/

http://regex101.com/r/yZ7rI5

在红宝石中:

'ruby-on-rails'[/-(.*)-/, 1]
# => "on" 
'abc-def-ghi-jkl'[/-(.*)-/, 1]
# => "def-ghi"
'mnop-qrst-uvw-xyza-bc-defg-hij-123'[/-(.*)-/, 1]
# => "qrst-uvw-xyza-bc-defg-hij"

【讨论】:

    【解决方案2】:
    'ruby-on-rails'.scan(/-(.*)-/).first.first
    

    【讨论】:

      【解决方案3】:

      这样就可以了:

      result = subject.scan(/-(.*)-/)
      

      【讨论】:

        猜你喜欢
        • 2022-11-23
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 2016-10-14
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多