Ruby正则表达式|匹配括号

时间:2015-08-13 12:03:02

标签: ruby regex

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

我们假设这是字符串^foo{bar}@Something_Else 我想匹配^foo{}完全跳过括号的内容。

到现在为止,我想出了如何使用此正则表达式获取所有内容\^(\w)\{([^\}]+)},但我真的不知道如何忽略大括号内的文本。

有人有想法吗?感谢。

2 个答案:

答案 0 :(得分:2)

更新

这是最终解决方案:

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') 

请参阅demo

技术是相同的:您捕获要保留的文本,只匹配要删除的文本,并使用反向引用来恢复您捕获的文本。

正则表达式匹配:

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

答案 1 :(得分:2)

如果您的意思是将^foo{}与正则表达式匹配,则不可能。正则表达式匹配仅匹配原始字符串的子字符串。由于^foo{}不是^foo{bar}@Something_Else的子字符串,因此您无法将其与单个匹配项匹配。