为什么这个调用返回NULL?
正则表达式错误吗?随着test
输入它不返回NULL。
文档说 NULL 表示错误,但它可能是什么错误?
$s = hex2bin('5b5d202073205b0d0a0d0a0d0a0d0a20202020202020203a');
// $s = 'test';
$s = preg_replace('/\[\](\s|.)*\]/s', '', $s);
var_dump($s);
// PHP 7.2.10-1+0~20181001133118.7+stretch~1.gbpb6e829 (cli) (built: Oct 1 2018 13:31:18) ( NTS )
你的正则表达式导致灾难性的回溯并导致 PHP 正则表达式引擎失败。您可以使用preg_last_error()功能检查这个。
$r = preg_replace("/\[\](\s|.)*\]/s", "", $s);
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
print 'Backtrack limit was exhausted!';
}
Output:
Backtrack limit was exhausted!
你正在得到NULL
返回值来自preg_replace
由于这个错误。按照PHP 文档preg_replace:
如果找到匹配,则将返回新主题,否则将原样返回主题或如果发生错误则为 NULL.
Fix:你不需要(\s|.)
使用时s
修饰符(DOTALL)。因为点在使用时匹配任何字符,包括换行符s
修饰符。
你应该只使用这个正则表达式:
$r = preg_replace('/\[\].*?\]/s', "", $s);
echo preg_last_error();
//=> 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)