2011-12-08 24 views
2

は、テキストの行を扱う表現を見つけ出すように見えることはできません文字列をグループ化しますなどのindexOf()、などの文字列関数で、これを解決するよりも、気の利いた正規表現..正規表現

+0

はあなたのグループの周りにバッククォートを置くことができますが、私たちはそれらを区別しやすくするために? – lunixbochs

+0

申し訳ありませんテキストをより読みやすく編集しました。ありがとう:) – Kman

+0

これは[その有名な質問](http://stackoverflow.com/q/1732348/192510)と多少似ています。ネストされたデリミタ(カンマと引用符)の問題を克服する必要があります。時にはデリミタとして機能することもありますが、テキストの一部に過ぎないこともあります。 2つの部分を分離することは、通常の正規表現能力を超えています。一部の正規表現エンジンには追加機能がありますが、一般的な意味で理解していることは必ずしも容易ではありません。いつも*。時間のいくつかが十分な場合は、それのために行く。 – 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