1

重複の可能性:
正規表現が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有効な正規表現を確認するにはどうすればよいですか?

4

3 に答える 3

5

正規表現に問題がある場合にエラーをスローする関数を作成できます。(私の意見ではそうだったはずです。)@警告を抑制するためにを使用することは悪い習慣ですが、スローされた例外に置き換える場合は問題ありません。

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;
}
于 2013-01-10T10:28:57.063 に答える
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
        }
    }

?>
于 2013-01-10T08:07:12.007 に答える
-1

try catchでラップpreg_matchし、例外がスローされた場合は結果をfalseと見なすことができます。

とにかく、正規表現を見て、有効な正規表現を検出することができます。

于 2013-01-10T08:24:51.670 に答える