这个:
preg_match('~foo(.*?)(bar)?~','foo bar',$m);
Run Code Online (Sandbox Code Playgroud)
给我这个:
Array
(
[0] => foo
[1] =>
)
Run Code Online (Sandbox Code Playgroud)
我对此感到困惑.我得到那个组1给我一个空字符串,因为它是一个懒惰的匹配.但不应该(bar)?应该贪婪,从而给我捕获组2?
似乎是合理的,我认为我应该得到的是
Array
(
[0] => foo
[1] =>
[2] => bar
)
Run Code Online (Sandbox Code Playgroud)
[1]空间在哪里.然而......这不会发生.为什么?
这里的答案非常简单.第一组没有任何东西(第一次传球),甚至没有空间.第二组尝试将空格与"bar"匹配,当然,这会失败.如果有什么背后的东西要匹配,引擎现在会回溯并扩展第一个捕获组以匹配空间.但它现在的状态非常好(第二组实际上可以是emtpy),所以它就是这样.
为了产生你所期望的,试试这个:
preg_replace('~foo(.*?)(bar)?_~', 'foo bar_', $m);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |