如何检查给定字符串是否有效正则表达式?

时间:2013-01-10 07:41:41

标签: php

  

可能重复:
  Test if a regular expression is a valid one in PHP

 <?php 

    $subject = "PHP is the web scripting language of choice.";    
    $pattern = 'sssss';

    if(preg_match($pattern,$subject))
    {
        echo 'true';
    }
    else
    {
        echo 'false';
    }

?>

上面的代码给出了警告,因为字符串$pattern不是有效的正则表达式。

如果我传递有效的正则表达式,那么它可以正常工作.....

如何检查$pattern是否有效的正则表达式?

3 个答案:

答案 0 :(得分:5)

如果Regexp出现问题,您可以编写一个抛出错误的函数。 (就像它应该在我看来一样。) 使用@来抑制警告是不好的做法,但是如果用抛出的异常替换它就应该没问题。

function my_preg_match($pattern,$subject)
{
    $match = @preg_match($pattern,$subject);

    if($match === false)
    {
        $error = error_get_last();
        throw new Exception($error['message']);
    }
    return false;
}

然后您可以使用

检查正则表达式是否正确
$subject = "PHP is the web scripting language of choice.";    
$pattern = 'sssss';

try
{
    my_preg_match($pattern,$subject);
    $regexp_is_correct = true;
}
catch(Exception $e)
{
    $regexp_is_correct = false;
}

答案 1 :(得分:0)

使用===运算符:

<?php 

    $subject = "PHP is the web scripting language of choice.";    
    $pattern = 'sssss';

    $r = preg_match($pattern,$subject);
    if($r === false)
    {
        // preg matching failed (most likely because of incorrect regex)
    }
    else
    {
        // preg match succeeeded, use $r for result (which can be 0 for no match)
        if ($r == 0) {
            // no match
        } else {
            // $subject matches $pattern
        }
    }

?>

答案 2 :(得分:-1)

你可以用try catch包装preg_match,如果它抛出异常,则认为结果为false。

无论如何,你可以看看regular expression to detect a valid regular expression