Ruby:搜索具有部分动态内容的字符串(Interpolated REGEX ??)

时间:2014-06-16 16:12:03

标签: regex ruby string string-interpolation

如何在ruby中搜索文本以查找可能具有不同内容的字符串,例如

text.include?("match here[generic//regex]and here").should == true

目标是使正则表达式匹配某个版本号的效果,但我们不一定关心版本号是什么,因为其余的字符串匹配。

2 个答案:

答案 0 :(得分:1)

如果您想确保有版本号,并且不介意匹配它,您可以使用:

ruby version *\d\.\d(?:\.\d)?

如果您根本不想匹配版本号,则需要前瞻:

ruby version(?= *\d\.\d(?:\.\d)?)

匹配ruby version,但检查我们后跟空格和x.x或x.x.x格式的数字

解释正则表达式

ruby version             # 'ruby version'
(?=                      # look ahead to see if there is:
   *                     #   ' ' (0 or more times (matching the most
                         #   amount possible))
  \d                     #   digits (0-9)
  \.                     #   '.'
  \d                     #   digits (0-9)
  (?:                    #   group, but do not capture (optional
                         #   (matching the most amount possible)):
    \.                   #     '.'
    \d                   #     digits (0-9)
  )?                     #   end of grouping
)                        # end of look-ahead

<强>参考

答案 1 :(得分:0)

以下是我如何去做的事情:

"ruby version"[/^ruby version [\d.]+/] # => nil
"ruby version 1.8.7"[/^ruby version [\d.]+/] # => "ruby version 1.8.7"

现在,如果您的版本字符串包含任何alpha,beta或类似标记,则无法使用此功能:

"ruby version 1.8.7a"[/^ruby version [\d.]+/] # => "ruby version 1.8.7"

请注意,它删除了alpha指示符。如果这对您很重要,请将它们添加到字符集中:

"ruby version 1.8.7a"[/^ruby version [\d.ab]+/] # => "ruby version 1.8.7a"

很难确定您必须捕获的内容,因为版本号格式可能会有很大差异。