Php 是否可以从preg_match捕获任何错误并显示常见错误消息?

Php 是否可以从preg_match捕获任何错误并显示常见错误消息?,php,regex,Php,Regex,我有一个网站,其中包含一个搜索框,允许用户输入一个模式,然后对照大字符串检查,以查看这些字符串中是否有用户指定模式的匹配项。这是使用PHP函数preg\u match()完成的 但是,当用户输入无效模式时,就会出现问题,例如导致以下错误的模式: preg_match()[function.preg match]:未知修饰符 搜索功能需要能够处理preg\u match()方法引发的任何错误,并在屏幕上显示常规模式无效消息。我在网上查过了,但我找不到一个一网打尽的方法来捕捉任何错误preg_mat

我有一个网站,其中包含一个搜索框,允许用户输入一个模式,然后对照大字符串检查,以查看这些字符串中是否有用户指定模式的匹配项。这是使用PHP函数
preg\u match()
完成的

但是,当用户输入无效模式时,就会出现问题,例如导致以下错误的模式:

preg_match()[function.preg match]:未知修饰符


搜索功能需要能够处理
preg\u match()
方法引发的任何错误,并在屏幕上显示常规模式无效消息。我在网上查过了,但我找不到一个一网打尽的方法来捕捉任何错误
preg_match()
可以抛出,有人有什么想法吗?

举个简单的例子,设置一个错误处理程序并抛出一个
异常
错误异常

function exception_error_handler($severity, $message, $file, $line) {
    throw new ErrorException($message, 0, $severity, $file, $line);
}
set_error_handler("exception_error_handler");
然后尝试/抓住:

try {
    preg_match('/.*/hello', 'hello');
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
捕获到异常:preg_match():未知修饰符“h”

Try:preg_last_error()详细信息页:

你把它放在try/catch结构中了吗?preg不会抛出异常…
set\u error\u handler()
并扔掉…另请参见:这是一个很好的答案,但是我认为最好显示特定的错误,而不仅仅是抑制并声明存在一些错误。不幸的是,并不是所有的regex错误都可以通过这种方式被捕获。例如,源字符串的无效字符编码刚刚使我的项目中的
preg\u match\u all
以静默方式返回
false
。(
preg_last_error
报告了
preg_BAD_UTF8_error
,但从未引发任何异常。我使用未知的修饰符进行了双重检查,它已愉快地抛出。)