Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式preg_分割-仅按最大组分割_Php_Regex_Preg Split - Fatal编程技术网

PHP正则表达式preg_分割-仅按最大组分割

PHP正则表达式preg_分割-仅按最大组分割,php,regex,preg-split,Php,Regex,Preg Split,我有下面的正则表达式 ((\$|(\\\[)).*?(\$|(\\\]))) 它应该可以捕获$和\[\]之间的所有内容,我对它进行了测试,它正常工作 PHP变体是(双反斜杠) 我想根据这个正则表达式分割我的文本。我怎么知道它只使用第一组(也是最大的组),而不是这些小组 preg_split('/((\$|(\\\\\[)).*?(\$|(\\\\\])))/', $text, -1, PREG_SPLIT_DELIM_CAPTURE); 因此,对于text这是我的$test$,我应该得到一个

我有下面的正则表达式

((\$|(\\\[)).*?(\$|(\\\])))
它应该可以捕获
$
\[\]
之间的所有内容,我对它进行了测试,它正常工作

PHP变体是(双反斜杠)

我想根据这个正则表达式分割我的文本。我怎么知道它只使用第一组(也是最大的组),而不是这些小组

preg_split('/((\$|(\\\\\[)).*?(\$|(\\\\\])))/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
因此,对于text
这是我的$test$,我应该得到一个数组

[0] => This is my 
[1] => $test$
[2] =>  for something.
但我明白了

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

你需要这样的东西:

$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\]
这样的文本,它将失败。如果需要捕获两个
$
和一对
\[
\]
之间的文本,则需要类似以下的regexp:

          <-------------> Match text between \[ and \]
/(\$.*?\$|\\\\\[.*?\\\\\])/
  <----->   Match text between dollars
在\[和\]之间匹配文本
/(\$.*?\$|\\\\\[.*?\\\\\])/
匹配美元之间的文本
          <-------------> Match text between \[ and \]
/(\$.*?\$|\\\\\[.*?\\\\\])/
  <----->   Match text between dollars