3

引用符の後に2番目の引用符("")が続く場合を除いて、デリミタキャプチャを使用して引用符文字(")でUTF-8文字列を分割しようとしています(たとえば)

"A ""B"" C" & "D ""E"" F"

3つの要素に分かれます

"A ""B"" C"
&
"D ""E"" F"

私は使用しようとしてきました:

$string = '"A ""B"" C" & "D ""E"" F"';
$temp = preg_split(
    '/"[^"]/mui',
    $string,
    null, 
    PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
);

しかし、それが私に与える成功なし

array(7) {
  [0]=>
  string(2) " ""
  [1]=>
  string(1) """
  [2]=>
  string(1) "C"
  [3]=>
  string(2) "& "
  [4]=>
  string(2) " ""
  [5]=>
  string(1) """
  [6]=>
  string(2) "F""
}

したがって、その文字が引用でもある場合を除き、引用の直後に続く文字はすべて失われます

この例では、文字列の最初と最後の文字として引用符がありますが、常にそうであるとは限りません。

{ "A ""B"" C" & "D ""E"" F" }

5つの要素に分割する必要があります

{
"A ""B"" C"
&
"D ""E"" F"
}

誰でもこれを機能させるのを手伝ってもらえますか?

4

2 に答える 2

4

分割で引用符が消費されてもかまわないとおっしゃったので、次の式を使用できます。

(?<!")\s?"\s?(?!")

2 つの否定的なルックアラウンドが使用されている場合。サンプルの出力は次のようになります。

{ 
A ""B"" C
&
D ""E"" F
}

[\s?末尾のスペースを消費するために を置きます。保持したい場合は削除してください]

于 2013-08-11T16:16:18.763 に答える