2011-12-08 75 views
2

似乎無法找出它處理這行文字的表達:正則表達式 - 分組串

'SOME_TEXT','EVEN_MORE_TEXT','EXPRESSION IS IN (''YES'',''NO'')' 

爲了這個分組

SOME_TEXT 
EVEN_MORE_TEXT 
EXPRESSION IS IN ('YES', 'NO') 

....我寧願有一記漂亮的正則表達式比字符串函數一樣的indexOf()等解決這個..

+0

你可以把周圍的分組反引號,使我們更容易告訴他們分開? – lunixbochs

+0

對不起!我編輯過的文字更具可讀性。謝謝:) – Kman

+0

這有點類似於[那個着名的問題](http://stackoverflow.com/q/1732348/192510)。你需要克服嵌套分隔符(逗號和引號)的問題。有時他們充當分隔符,有時他們只是文本的一部分。兩者之間的分離超出了正常的正則表達式能力 - 雖然一些正則表達式引擎具有額外的能力,但從總體上理解您所得到的並不總是很容易,所以您並不總是知道正則表達式是否會給出正確答案*每時每刻*。如果有些時間足夠好,那就去做吧。 – NealB

回答

4

正則表達式'([^']|'')++'將匹配你感興趣,因爲這個演示顯示部分:

$text = "'SOME_TEXT','EVEN_MORE_TEXT','EXPRESSION IS IN (''YES'',''NO'')'"; 
preg_match_all("/'([^']|'')+'/", $text, $matches); 
print_r($matches[0]); 

它打印:

Array 
(
    [0] => 'SOME_TEXT' 
    [1] => 'EVEN_MORE_TEXT' 
    [2] => 'EXPRESSION IS IN (''YES'',''NO'')' 
) 
+0

+1。我猜'++'是爲了避免災難性的回溯是嗎? – FailedDev

+0

測試表達式時出現未定義的結果。由於++ – Kman

+1

原諒我的無知,但如果將它應用於整個正則表達式,那麼使用所有格++的優點是什麼? – ean5533