2016-09-24 1 views
0

preg_splitフォワードスラッシュと一重引用符で囲んだ文字列を除外する方法はありますか?preg_splitスラッシュを一重引用符で囲んだ文字列に続いて除外する方法

私はこの問題をかなり襲ってきました。

以下はコードです。その後に出力されます。

$str = "storeid='1,2',categoryname = 'the ultimate \'operating room'"; 

$match = preg_split("/('[^'\\\\]*')/U", $str, null, PREG_SPLIT_DELIM_CAPTURE); 

print_r($match); 

OUTPUT

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname = 'the ultimate \ [3] => 'operating room' [4] =>) 

しかし、ここでは私の予想される出力ですが、私は除外したい\」。

誰かが私を理解して助けてくれることを願っています。

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname =[3] => 'the ultimate \'operating room' ) 

答えて

0

シングルクォートで囲まれたすべてをキャプチャするときは、エスケープされたシングルクォートにも注意する必要があります。 できるだけ同じ前のパターンが存在する場合

'[^'\\\\]*(?:\\\\.[^'\\\\]*)*' 
  • '単一引用符(開口部)
  • [^'\\\\]*'\
  • (?:\\\\.[^'\\\\]*)*マッチ以外のすべての文字をエスケープ文字:この正規表現に続き
  • '一括見積り(終了)

PHP:

$match = preg_split("/('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')/", 
    $str, 
    -1, 
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

出力:

Array 
(
    [0] => storeid= 
    [1] => '1,\'2' 
    [2] => ,categoryname = 
    [3] => 'the ultimate \'operating room' 
) 
+0

あなたはパターンが単一引用符ではありません(単一引用符の間)任意のエスケープ文字で壊れることを行う場合。エスケープされたすべての文字を処理するには、(?:\\\\ '[^' \\\\] *) 'を'(?s:\\\\。[^ '\\\\\] *)改行を含む文字。 –

+0

私が答えで書いた最初の正規表現は問題ないと思います。私は説明を書いている間に私が何を考えているのか分からない。とにかくありがとう。 @CasimiretHippolyte – revo

関連する問題