Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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,我试图创建一个正则表达式模式来匹配字符串中的特定文本集 让我们假设这是字符串^foo{bar}@Something\u other 我想匹配^foo{}完全跳过括号中的内容 直到现在,我才知道如何在这里用这个正则表达式获取所有内容\^(\w)\{([^\}]+},但我真的不知道如何忽略花括号内的文本 有人有主意吗?谢谢。更新 这是最终的解决方案: puts script.gsub(/(\^\w+)\{([^}]+)(})/, '[BEFORE]\2[AFTER]') 虽然我更喜欢少分组: pu

我试图创建一个正则表达式模式来匹配字符串中的特定文本集

让我们假设这是字符串
^foo{bar}@Something\u other
我想匹配
^foo{}
完全跳过括号中的内容

直到现在,我才知道如何在这里用这个正则表达式获取所有内容
\^(\w)\{([^\}]+}
,但我真的不知道如何忽略花括号内的文本

有人有主意吗?谢谢。

更新 这是最终的解决方案:

puts script.gsub(/(\^\w+)\{([^}]+)(})/, '[BEFORE]\2[AFTER]')
虽然我更喜欢少分组:

puts script.gsub(/\^\w+\{([^}]+)}/, '[BEFORE]\1[AFTER]')
原始答案 我需要用其他东西替换
^foo{}
部分

以下是使用
gsub
执行此操作的方法:

s = "^foo{bar}@Something_Else"
puts s.gsub(/(.*)\^\w+\{([^}]+)}(.*)/, '\1SOMETHING ELSE\2\3') 

技术是一样的:捕获要保留的文本并与要删除的文本匹配,然后使用反向引用恢复捕获的文本

正则表达式匹配:

  • (.*)
    -从一开始就将尽可能多的文本匹配并捕获到组2中
  • \^\w+\{
    -匹配
    ^
    ,1个或多个单词字符,
    {
  • ([^}]+)
    -匹配并捕获到组2中除
    }
  • }
    -匹配
    }
  • (.*)
    -最后将字符串的其余部分匹配并捕获到组3中

如果您想通过与正则表达式的单个匹配来匹配
^foo{}
,这是不可能的。正则表达式匹配只匹配原始字符串的子字符串。由于
^foo{}
不是
^foo{bar}@Something.\u other
的子字符串,因此无法将其与单个匹配项进行匹配。

尝试匹配括号之间的任何内容,如下所示:
foo\{.*}@Something.\u other
为什么它必须是正则表达式?你不能使用字符串操作吗?我们越来越近了,谢谢!但这并不是我真正需要的。基本上,我需要用其他内容替换^foo{}部分:)是的,更准确地说,script.gsub(/(\^\w+)\{([^}]+)(})/,“[之前]\2[之后]”)谢谢!技术是一样的:捕获要保留的文本,然后匹配要删除的文本,然后使用反向引用恢复捕获的文本。