preg_replace返回为null

2020-05-27  本文已影响0人  鸿雁长飞光不度

preg_replace这个函数用的太多了,就是根据正则表达式去替换字符串里面的某些内容,如果替换成功返回替换的结果,如果正则不匹配就返回原字符串。当然这里的字符串支持以数组的形式传一组内容批量替换。代码里面一直用

  $result = preg_replace('/^([\s\S]*;)([\s\S]*?)(class.*?extends[\s\S]*)$/', "$1$classComments$3", $fileContent);
  file_put_contents($filePath, $result);

直到有一天发现文件的内容是空的,才去查手册,原来还有一种情况是出错的时候会返回null。按照正常的思路,我想用异常捕获以下,可是根本没有抛出。查了半天发现可以用 preg_last_error(),这个函数去查看上次正则表达式的出错的原因,太伤了。返回值如下

image.png

我的错误是2,正则回溯限制问题,仔细检查了正则表达式,返现用了非贪婪模式匹配,确实会引发问题,同时实际情况是短文本没有问题,长文本就会有问题。所以只能适当调整以下正则了。

上一篇 下一篇

猜你喜欢

热点阅读