Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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
Ruby 用于获取括号之间的值的正则表达式_Ruby_Regex - Fatal编程技术网

Ruby 用于获取括号之间的值的正则表达式

Ruby 用于获取括号之间的值的正则表达式,ruby,regex,Ruby,Regex,我正试图编写一个正则表达式来获取括号之间的值。我期望一个没有括号的值。例如,假设: value = "John sinu.s(14)" 我希望得到14 我尝试了以下方法: value[/\(.*?\)/] 但是它给出了结果(14)。请帮助我。尝试使用此正则表达式 /\((.*?)\)/ \(将匹配字符串中的左括号 (.*)创建 \)将与右括号匹配 您可以使用 value[/\((.*?)\)/, 1] 或 使用一个和第二个参数仅提取组值 请注意,\(.*?)也将匹配其中包含(字符的子

我正试图编写一个正则表达式来获取括号之间的值。我期望一个没有括号的值。例如,假设:

value = "John sinu.s(14)" 
我希望得到
14

我尝试了以下方法:

value[/\(.*?\)/]

但是它给出了结果
(14)
。请帮助我。

尝试使用此正则表达式

/\((.*?)\)/
  • \(
    将匹配字符串中的左括号
  • (.*)
    创建
  • \)
    将与右括号匹配
    • 您可以使用

      value[/\((.*?)\)/, 1]
      

      使用一个和第二个参数仅提取组值

      请注意,
      \(.*?)
      也将匹配其中包含
      字符的子字符串,第二个选项将仅匹配不包含
      的括号之间的子字符串,因为
      [^()]
      是匹配任何字符的子字符串,但

      从:

      str[regexp,capture]→ 新建或无

      如果提供了
      Regexp
      ,则返回字符串的匹配部分。如果捕获跟随正则表达式(可能是捕获组索引或名称),则跟随正则表达式,则返回
      匹配数据的组件

      如果需要提取多个匹配项,请使用
      String#scan

      value = "John sinu.s(14) and Jack(156)"
      puts value.scan(/\(([^()]*)\)/)
      # => [ 14, 156 ]
      

      请参阅。

      另一个选项是使用非捕获环视,如下所示

      value[/(?<=\().*(?=\))/]
      
      value[/(?您可以使用

      /(?<=\\()[^\\)]+/g
      

      /(?您希望提取括号之间的字符串还是使用正则表达式提取?您在问题中指定了后者,但可以想象,您的问题实际上是前者,您假设必须使用正则表达式

      如果您只需要该值,而不需要对用于获取该值的方法进行任何限制,那么可以使用and简单地实现


      使用
      value[/\(.*?)/,1]
      或者,您可以省去前瞻,而改为更改捕获机制:
      /(?这是一个积极的回顾,这是您想要的。
      
      /(?<=\\()[^\\)]+/g
      
      s = "John sinu.s(14)"
      
      s[s.index('(')+1 .. s.rindex(')')-1]
        #=> "14"