繁体   English   中英

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

[英]Ruby: searching for string with partial dynamic contents (Interpolated REGEX??)

如何在红宝石中搜索文本以查找内容可能不同的字符串,例如

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

正则表达式的目标是将某些内容与版本号的效果进行匹配,但由于字符串的其余部分都匹配,因此我们不必关心版本号是什么。

如果要确保有版本号,并且不介意与之匹配,则可以使用:

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

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

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

匹配ruby version但检查我们后面是否有空格以及xx或xxx形式的数字

解释正则表达式

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

参考

这是我的处理方法:

"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"

由于版本号格式可能千差万别,因此很难确定要捕获的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM