0

私の正規表現は次のとおりです。

$regex = '/(?<=Α: )(([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4}))/';

とりわけ私のコンテンツは次のとおりです。

Q: Email Address 
A: name@example.com

Rad Software 正規表現デザイナーは、それが機能するはずだと言っています。

さまざまなオンライン サイトが正しい結果を返します。

(?<=Α: ) 後読みを削除すると、正規表現はすべてのメールを正しく返します。

PHPから実行すると、一致が返されません。

どうしたの?

また、特定のタイプの正規表現 (つまり (?<=Email: ) を異なるコンテンツで使用しました。その場合は問題なく動作します。

4

5 に答える 5

1

ここでDOTALL フラグを使用していない可能性が最も高いためs、正規表現でも DOT が改行に一致します。

$str = <<< EOF
Q: Email Address 
A: name@example.com
EOF;
if (preg_match_all('/(?<=A: )(([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4}))/s', 
                   $str, $arr))
   print_r($arr);

出力:

Array
(
    [0] => Array
        (
            [0] => name@example.com
        )

    [1] => Array
        (
            [0] => name@example.com
        )

    [2] => Array
        (
            [0] => name
        )

    [3] => Array
        (
            [0] => example.
        )

    [4] => Array
        (
            [0] => com
        )

)
于 2013-04-25T20:06:35.413 に答える
0

問題は、正規表現にΑアクセント付きの が含まれているのに、コンテンツに含まれAていない が含まれていることです。したがって、後読みは一致しません。

正規表現を次のように変更します。

$regex = '/(?<=A: )(([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4}))/';

そしてそれは動作します。

于 2013-04-25T20:12:33.457 に答える
0

件名の A 文字は、コード 65 (Unicode または ascii) の「通常の」文字です。しかし、パターンの後読みで使用する A には、コード 913 (ユニコード) があります。それらは似ていますが、異なっています。

于 2013-04-25T20:39:52.817 に答える