积极/消极,向前看/看起来混乱?

时间:2014-01-30 09:25:44

标签: ruby regex

s = "some {text|in|braces} found"

获取大括号之间的内容

s.scan(/(?<={).*(?=})/) #=> ["text|in|braces"]

现在要获取不在括号中的内容,我试过

s.scan(/(?<!{).*(?!})/) #=> ["some {text|in|braces} found", ""]

显然我错过了一些非常重要的事情。

2 个答案:

答案 0 :(得分:2)

你的第二个正则表达式正在寻找

  • 任意字符串“。*”
  • 之前没有“{”
  • 后面没有“}”

当然匹配整个字符串,因为“找到一些{text | in | braces}”既不是“{”,也不是“}”。

答案 1 :(得分:0)

不要忘记使用\“)(?{}”。

来逃避特殊字符

你可以用2个操作来解决这个问题,首先你可以使用这个正则表达式来设置你的参数:

s  = s.gsub(/.*(\{.*\})  # => "text|in|braces"
s.scan(/\w+/) # => ["text", "in", "braces"]

s.gsub(/.*(\{.*\}).scan(/\w+/)  # => ["text", "in", "braces"]