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[之后]”)谢谢!技术是一样的:捕获要保留的文本,然后匹配要删除的文本,然后使用反向引用恢复捕获的文本。