如何确定字符串是否是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));
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";
}