0

パターンで指定された正規表現に一致するサブジェクトを検索しようとしていますが、正しく機能していません。番号/10 と郵便番号を一致させたい

たとえば、文字列が「hello 3/10 HU2」の場合、preg_match 関数を 3 と郵便番号に一致させたいのですが、その順序にする必要があります。

奇妙なことに、preg_match を逆の順序で試してみると、HU2 3/10 は機能しますが、コードを変更すると値 3 が認識されません。

どんな助けでもいただければ幸いです

以下のコードは注文 HU2 3/10 で機能しますが、逆の順序で必要です

<?php

    preg_match('/([A-Za-z]{1,2}[0-9][A-Za-z0-9]?) ([0-9]{1,2})/', "HU2 3/10", $matches);    

    echo $matches[1];
    echo "<br>";
    echo $matches[2];


?>
4

3 に答える 3

1

変更する場合は/10、パターンに を含める必要があります。スラッシュをエスケープする必要がないように、区切り文字を変更できることに注意してください。

preg_match('~([0-9]{1,2})/10 ([A-Za-z]{1,2}[0-9][A-Za-z0-9]?)~', "3/10 HU2", $matches);

[0-9]置き換えることができます\d。また、10が可変数の場合、それも考慮に入れるのは簡単です。

preg_match('~(\d{1,2})/\d+ ([A-Za-z]{1,2}\d[A-Za-z0-9]?)~', "3/10 HU2", $matches);

最終的な最適化として、i修飾子を使用して、文字の半分を除外しましょう (パターンの大文字と小文字が区別されなくなります)。

preg_match('~(\d{1,2})/\d+ ([A-Z]{1,2}\d[A-Z0-9]?)~i', "3/10 HU2", $matches);
于 2013-04-19T20:40:21.520 に答える