Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Ruby:搜索包含部分动态内容的字符串(内插正则表达式??)_Regex_Ruby_String_String Interpolation - Fatal编程技术网

Regex Ruby:搜索包含部分动态内容的字符串(内插正则表达式??)

Regex Ruby:搜索包含部分动态内容的字符串(内插正则表达式??),regex,ruby,string,string-interpolation,Regex,Ruby,String,String Interpolation,在ruby中,如何在文本中搜索具有不同内容的字符串,例如 text.include?("match here[generic//regex]and here").should == true 正则表达式的目标是匹配某个版本号,但我们不一定关心版本号是什么,因为字符串的其余部分是匹配的。如果您想确保有一个版本号,并且不介意匹配它,您可以使用: ruby version *\d\.\d(?:\.\d)? 如果您根本不想匹配版本号,则需要进行前瞻: ruby version(?= *\d\.\d(

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

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

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

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

ruby version *\d\.\d(?:\.\d)?
如果您根本不想匹配版本号,则需要进行前瞻:

ruby version(?= *\d\.\d(?:\.\d)?)
匹配
ruby版本
,但检查后面是否有空格和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
参考


    • 以下是我的做法:

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

      很难说您必须捕获什么,因为版本号格式可能变化很大。

      您能添加一些示例说明正则表达式应该匹配什么和不应该匹配什么吗?这是针对RSpec的吗?您可能需要添加tag.input=“ruby version 1.8.7”match on=“ruby version[一些数字]”。我如何匹配文本并确认版本存在但不是特定版本。这将在cucumber测试中的步骤定义中。问题的措辞(例如,“部分动态内容”、“可变内容”、“插值”等)与问题的描述完全不匹配。一个带有
      \d+
      的简单正则表达式不会起到作用吗?为什么您认为这需要向前看?一个普通的正则表达式可以做你想做的事情,使用lookahead会使匹配数字变得很困难。@matt当我读到它时,我以为他根本不想匹配版本号。现在重读一遍,我发现他也不介意匹配它,所以你是对的,没有必要向前看。谢谢你的提醒。:)