1

次の正規表現があります

((\$|(\\\[)).*?(\$|(\\\])))

との間のすべてをキャプチャする必要が$$あり、 http://gskinner.com/RegExr/\[\]でテストしましたが、動作しています。

PHP バリアントは (2 つのバックスラッシュ)

((\$|(\\\\\[)).*?(\$|(\\\\\])))

その正規表現に基づいてテキストを分割したいと思います。これらの小さなグループではなく、最初の (そして最大のグループ) のみを使用していることをどのように判断できますか?

preg_split('/((\$|(\\\\\[)).*?(\$|(\\\\\])))/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

したがって、テキストThis is my $test$ for something.の場合は配列を取得する必要があります

[0] => This is my 
[1] => $test$
[2] =>  for something.

しかし、私は得る

[0] => This is my 
[1] => $test$
[2] => $
[3] => 
[4] => $
[5] =>  for something.
4

1 に答える 1

2

次のようなものが必要です。

$text = 'This is my $test$ for \[something\] new!';
print_r(preg_split('/(\$.*?\$|\\\\\[.*?\\\\\])/', $text, -1, PREG_SPLIT_DELIM_CAPTURE));

出力:

Array
(
    [0] => This is my 
    [1] => $test$
    [2] =>  for 
    [3] => \[something\]
    [4] =>  new!
)

私見、あなたの正規表現は(おそらく)間違っています。のようなテキストでは失敗しますHello $there\]。2 つの とと$のペアの間のテキストをキャプチャする必要がある場合は、次のような正規表現が必要です。\[\]

          <-------------> Match text between \[ and \]
/(\$.*?\$|\\\\\[.*?\\\\\])/
  <----->   Match text between dollars
于 2012-07-08T16:54:43.570 に答える