2013-06-29 104 views
0

我有一個長字符串,其中包含幾個用BBcode編碼的URL。例如,我的字符串的一部分:如何替換字符串中的第一個和最後一個匹配項

"...[url=http://example1.com][img]http://picture.com/1.jpg[/img][/url] 
[url=http://example2.com][img]http://picture.com/2.jpg[/img][/url] 
[url=http://example3.com][img]http://picture.com/3.jpg[/img][/url]..." 

所包含的行之前和之後"...",但含有"[url=""[/url]"沒有更多的線路。我想替換的"[url=""[spoiler][url=]"第一次出現的"[/url]"最後一次出現"[/url][/spoiler]"獲得此:

"...[spoiler][url=http://example1.com][img]http://picture.com/1.jpg[/img][/url] 
[url=http://example2.com][img]http://picture.com/2.jpg[/img][/url] 
[url=http://example3.com][img]http://picture.com/3.jpg[/img][/url][/spoiler]..." 

我如何使用Ruby實現這一目標?

+2

我還沒有想過正則表達式呢,但是你是否控制了這個字符串的構建?當它首次建成時,只需將這些擾流片插入絃線就更容易了。 – dsw88

+0

不,我無法控制,我只是有很多類似的字符串,我不得不「欺騙」。 – Konstantin

回答

4

你可以試試這個:

str = str.sub(/\[url=.+\[\/url\]/m, '[spoiler]\0[/spoiler]') 

的想法是(標籤包括)與自身替換字符串後加入[spoiler][/spoiler],以取代第一[url..]和最後[/url]之間的所有代碼塊。

由於量詞+是貪婪的子字符串[/url]必須是最後一個。

+0

+1優秀的文字雜耍。 –

+0

@Denomales:<°))))>謝謝! –

+0

Thx,非常好的主意,同時我用「sub」和「reverse」解決了它... – Konstantin

相關問題