如何在ruby中搜索文本以查找可能具有不同内容的字符串,例如
text.include?("match here[generic//regex]and here").should == true
目标是使正则表达式匹配某个版本号的效果,但我们不一定关心版本号是什么,因为其余的字符串匹配。
答案 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"
很难确定您必须捕获的内容,因为版本号格式可能会有很大差异。