如何找出一个字符串是否是一个PHP正则表达式


How to find out if a string is a PHP regex?

是否有任何方法可以做到这一点,而不使用@preg_match上的错误控制操作符?:)

因为PHP要求在字符之间包装模式,所以我想这样做:

  1. 获取第一个字符。
  2. 查找该字符在字符串中最后一次出现的字符
    $rpos = strrpos($string, $string[0]);
    
  3. 获取修饰符列表:

    $mods = substr($rpos, strlen($string));
    
  4. 查看此列表中是否有无效的修饰符。如果有返回false,否则regex似乎是有效的。

这个解决方案有多可靠?还有更好的吗?

我总是在Symfony2 Finder组件中使用这个函数:

if (preg_match('/^(.{3,}?)([imsxuADU]*)$/', $expr, $m)) {
    $start = substr($m[1], 0, 1);
    $end   = substr($m[1], -1);
    if (($start === $end && !preg_match('/[*?[:alnum:] '''']/', $start)) || ($start === '{' && $end === '}')) {
        // It's a regex!
    }
}

在注释中已经用简短的方式进行了描述。但是您可以使用filter_var方法

检查正则表达式是否正确
$string = "String to match";
if (filter_var($string, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" =>  "/abc/")))) {
    echo "Regex is OK";
} else {
    echo "Regex not okay";
}