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