【问题标题】:Regular expression issue in RubyRuby中的正则表达式问题
【发布时间】:2011-12-29 12:48:24
【问题描述】:

我正在尝试使用 Ruby 从字符串中提取以下模式,但我似乎并没有在 Ruby 上走得太远...

这是我正在使用的正则表达式\/p\/[\w-\/]*[\d+]

这是我要提取的字符串类型。

/p/hyphenated-words/more-hyphenated-words/102049294

所以简而言之,字符串总是以 /p/ 开头,以多个数字结尾,并包含一个或多个带有可能连字符的子目录。

我的正则表达式适用于一些在线表达式测试器,但不适用于 Ruby。

【问题讨论】:

  • 您应该查看rubular.com,在那里您可以在浏览器中实时测试您的 Ruby 正则表达式。我一直在使用它。
  • 嗨 Johannes,我一直在使用 Rubular。它非常方便 - 它之前没有工作。如果我认为某些东西不能正常工作,我也会使用link

标签: ruby regex


【解决方案1】:

除了@Mark Byers 的回答:

 /p/[\w-/]*[\d+]

正则表达式的 [\d+] 部分无关紧要。原因是它前面有一个贪婪的量词,它量化了一个类,而该类又包含\w\w 转换为 [a-zA-Z0-9_] 它将“吃掉”它之后的任何数据。

最后,用 \d 代替 [\d+] (如果你必须的话)。

【讨论】:

    【解决方案2】:

    字符类中的连字符表示字符范围。转义它以使其成为文字连字符。也就是把这个[\w-\/]改成[\w\-\/]

    还将[\d+] 更改为\d+,不带方括号。

    【讨论】:

      【解决方案3】:

      您需要在 ruby​​ 中包含正斜杠。
      所以你的正则表达式应该看起来像 \/\p\/\ 这将完全匹配 /p/
      以上帖子将帮助您完成其余部分

      【讨论】:

      • 只有在使用/ 作为正则表达式分隔符时才需要这样做。我的偏好是使用%r{/p/} 而不是/\/p\//
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      相关资源
      最近更新 更多