[英]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.