2014-01-30 36 views
2
s = "some {text|in|braces} found" 

要獲得括號正面/負面和向前看/看在背後混亂?

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

現在的內容得到不在括號中的內容,我想

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

顯然我失去了一些東西很重要。

回答

2

你的第二個正則表達式尋找

  • 的任意字符串 「*」
  • 不是由之前 「{」
  • 後面沒有用 「}」

當然匹配整個字符串,因爲「some {text | in | braces}找到」既沒有前面有「{」,也沒有後面跟着「}」。

+0

那麼什麼是使用向前看/後面來獲取不在括號中的內容的權利體現在哪裏? – Bala

+1

定義「不是在大括號」。你想它返回「一些發現」 ? –

0

不要忘記使用\特殊字符「)({}?」

你可以用2個操作解決這個首先你可以用這個表達式islotale您的參數:

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

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