如何捕获无效的preg_match模式?

Lia*_*iam 8 php regex preg-match

我正在编写一个PHP脚本,它接受来自用户的正则表达式模式,由preg_match()使用.如何检查模式是否有效?

Pek*_*ica 8

根据文件,

如果发生错误,preg_match()返回FALSE.

问题是它也会发出警告.

处理此问题的一种方法是抑制错误消息的输出,捕获返回值,并在错误时输出错误error_get_last().

就像是

$old_error = error_reporting(0); // Turn off error reporting

$match = preg_match(......);

if ($match === false) 
 {
   $error = error_get_last();
   echo $error["message"];
 }

error_reporting($old_error);  // Set error reporting to old level
Run Code Online (Sandbox Code Playgroud)

您可能不需要生产环境中的错误报告位 - 这取决于您的设置.

  • 你知道,并不禁止使用 `@` :p (2认同)

Lek*_*eyn 5

试试吧. 如果模式无效,preg_match()将返回FALSE.

返回值:preg_match()返回模式匹配的次数. 这将是0次(不匹配)或1次,因为preg_match()将在第一次匹配后停止搜索. 相反,preg_match_all()将一直持续到主题结束.如果发生错误,preg_match()返回FALSE.