2011-12-05 42 views
2

這是關於Ruby的正則表達式之間的一切..Ruby的正則表達式匹配的關鍵字

我有一個字符串,看起來像:

「--- \正PARSEFROMHERE anyrthing你能想象的數字特殊字符任何東西ENDPARSEFROMHERE \ n PARSEFROMHERE anyrthing你可以想象數字特殊字符任何東西ENDPARSEFROMHERE \ n「

我怎麼會匹配PARSEFROMHERE ENDPARSEFROMHERE與一些正則表達式之間的一切?

謝謝!

+1

在那裏說:「anyrthing你能想象的數字特殊字符的任何東西」的一部分,我可以想像,它可能會說「富酒吧fake_ENDPARSEFROMHERE巴茲」。在這種情況下應該發生什麼? –

+0

不,PARSEFROMHERE總是以空格分隔 – Stpn

+2

好吧,如果「anyrthing你可以想象數字特殊字符任何東西」包含「foo bar假ENDPARSEFROMHERE baz」?我知道,我的想象力非常狂野,但是你*已經*說出「你能想象到的任何東西」...... –

回答

3

試試這個:

regexp = /\bPARSEFROMHERE\b(.*?)\bENDPARSEFROMHERE\b/m 

一切都被存儲到反向引用1.但是,如果由於某種原因,神奇你有「不平衡」分隔符這個表達式會失敗,悲慘

編輯:

regexp = /\sPARSEFROMHERE\s(.*?)\sENDPARSEFROMHERE\b/m 

根據你的例子PARSEFROMHERE總是先,其次是空間。同去與ENDPARSEFROMHERE但這結束在\n所以我keed字邊界錨有..

+2

考慮到語句_「PARSEFROMHERE總是由空格分隔」_,您可能希望明確地使用它而不是'\ b'(例如,假設'foo-bar'包含四個'\ b')。 – Phrogz

+0

有趣的是Ruby在所有其他主要風格使用'/ s'的情況下如何使用'/ m'。 – Qtax

+0

@Progrog好點!編輯。 – FailedDev

0

簡單,只要「ENDPARSEFROMHERE」不匹配內顯示:

PARSEFROMHERE(.+)ENDPARSEFROMHERE 

沒有與此然而問題。這也將從一個ENDPARSEFROMHERE到另一個ENDPARSEFROMHERE,所以如果你的開始和結束標籤不平衡,你會遇到問題。

+1

我可以想象新的線條在那裏,使這種表達失敗的原因有兩個。 – Qtax