2

次のコードで、PHP preg_matchがfalseを返すのはなぜですか?注:質問と同じタイトルの古い質問をいくつか読みましたが、コンテキストが異なります

<html>
    <head>
    </head>
    <body>
        <?php
        $str = "This is a test for PCRE.";
        $ptrn = "This";
        $preg_match_result_arr;
        $preg_match_result = preg_match($ptrn, $str, $preg_match_result_arr);

        if (1 === $preg_match_result)
        {
            echo "The pattern has matched in the string:<br/>".
                "the match is $preg_match_result_arr[0]<br/>";
        }   
        elseif (0 === $preg_match_result) 
        {
            echo "The pattern has not matched in the string:<br/>";
        }
        elseif (false === $preg_match_result)
        {
            echo "An error has occured in matching<br/>";
        }

        ?>
    </body>
</html>
4

4 に答える 4

4

あなたの表現は正しくありません、それはそのような区切り文字で囲まれるべきです。

$ptrn = '/This/';
于 2012-08-05T12:54:53.927 に答える
3

区切り文字がありません。パターンは次のようになります(#使用されていますが、別のものである可能性があります)。

$ptrn = "#This#";
于 2012-08-05T12:54:19.840 に答える
2

'/pattern/'の中にパターンを入れてください

例えば:

$ptrn='/^This/'
于 2012-08-05T12:58:06.057 に答える
0

例外をスローし、パターンを自動的に区切るT-Regxの使用を検討でき ます。

<?php
    try {
        pattern("This")
            ->match("This is a test for PCRE.")
            ->first(function (Match $match) {
                echo "The pattern has matched in the string:<br/>".
                     "the match is $match<br/>";
            });
    }
    catch (MatchPatternException $e)
    {
        echo "An error has occured in matching<br/>";
    }

またはあなたがすることができます

if (pattern("This")->matches("This is a test for PCRE.")) {
    echo "The pattern has matched in the string:<br/>";
}
else {
    echo "The pattern has not matched in the string:<br/>";
}
于 2018-08-06T12:55:44.883 に答える