2012-11-25 73 views
1

我試圖環繞的紅寶石串括號,只有當它不裹尚未:裹括號

"my string (to_wrap)" => "my string (to_wrap)" 
"my string to_wrap" => "my string (to_wrap)" 

我已經試過類似:

to_wrap = 'to_wrap' 
regexp = Regexp.new "(?!\()#{to_wrap}(?!\))" 
string.sub(regexp, "(#{to_wrap})") 

,但它確實不行。

在此先感謝!

回答

3

你非常接近。不過,你的第一個負面看法是前瞻性的。所以它看起來第一個字符to_wrap。只是做一個回顧後:

"(?<!\()#{to_wrap}(?!\))" 

而剛剛與另一種選擇逃避括號您呈現(這是真的味道上使用的問題,但我更容易閱讀找到它):

"(?<![(])#{to_wrap}(?![)])" 
+0

正是我需要的,謝謝。還要感謝[]]語法。 :) – suricactus

+0

@ erik1001實際上它濫用字符類,通過創建一個單字符字符類(並且大多數元字符不必在字符類中轉義)。我傾向於將它用於幾乎所有的東西(特別是'[。]','[*]'和類似的東西),除了方括號本身。 –

+0

@ m.buettner你爲什麼不逃過括號?某種方式更好嗎? '「(?<!\()#{to_wrap}(?!\))」' – FUT