如何确定字符串是否是PHP正则表达式?

如何确定字符串是否是PHP正则表达式?,php,regex,validation,Php,Regex,Validation,在不使用@preg_match上的错误控制运算符的情况下,是否有办法做到这一点 因为PHP需要在字符之间包装模式,所以我想这样做: 获取第一个字符 在字符串中查找此字符的最后一次出现: $rpos = strrpos($string, $string[0]); 获取修改器列表: $mods = substr($rpos, strlen($string)); 。如果返回值为false,则regex看起来是有效的 这个解决方案有多可靠?有更好的吗?我总是在Symfony2查找器组件中使用:

在不使用
@preg_match
上的错误控制运算符的情况下,是否有办法做到这一点

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

  • 获取第一个字符
  • 在字符串中查找此字符的最后一次出现:

    $rpos = strrpos($string, $string[0]);
    
  • 获取修改器列表:

    $mods = substr($rpos, strlen($string));
    
  • 。如果返回值为false,则regex看起来是有效的
  • 这个解决方案有多可靠?有更好的吗?

    我总是在Symfony2查找器组件中使用:

    if(preg_match('/^(.{3,}?([imsxhuadu]*)$/',$expr,$m)){
    $start=substr($m[1],0,1);
    $end=substr($m[1],-1);
    如果($start===$end&&!preg\U匹配('/[*?[:alnum:\\\\\]/',$start));($start==='{'&&&$end===='}')){
    //这是一个正则表达式!
    }
    }
    
    在命令中,已经用简短的方式对其进行了描述。 但是您可以使用该方法检查正则表达式是否正常


    您能给出一个失败的字符串示例吗?您可以将filter\u var()与选项filter\u VALIDATE\u REGEXPAnnaK:
    /(/
    将通过测试,但不是有效的正则表达式,因为它包含不匹配的括号。请记住,某些正则表达式可能是有效的,但运行时会消耗不合理的时间或内存。FILTER\u VALIDATE\u REGEXP真的有效吗?否,FILTER\u VALIDATE\u REGEXP=“根据regexp验证值,这是一个与Perl兼容的正则表达式。”。除非建议在Wouter J的答案中使用regex和
    filter\u var
    方法。很好:D我认为这与我建议的做的事情相同,但也检查最小字符
    警告:filter\u var()[function.filter var]:“regexp”选项在…中丢失。
    第二段PHP是要使用的代码。我第一次使用的filter\u var设置仅适用于其他筛选器(如filter\u VALIDATE\u INT)。
    $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";
    }