1

こんにちは私は検索文字列を照合しようとしています。そのため、郵便番号が文字列の先頭にある場合は、郵便番号と残りの文字列の一致を返します。これは私が今まで持っているものです

$str = "90210 Beverly Hills, CA";
$res = preg_match('/^((\d{5})(-\d{4})?)\s+(.+?)$/', $str, $matches);

しかし、一致をprint_rすると、スペース用の追加のキーが返されます。

Array
(
    [0] => 90210 Beverly Hills, CA
    [1] => 90210
    [2] => 90210
    [3] =>
    [4] => Beverly Hills, CA
)

とにかく、パターンを改善して、空の文字列ではない一致を返すことができますか?このインスタンスに適したパターンはありますか?また、郵便番号だけ、またはテキスト文字列だけを指定すると、falseが返されます。

4

3 に答える 3

0

一致グループ 3 はスペースではありません。空です(またはおそらく未定義か何か-私はPHPに深く関わっていません)。(-\d{4})空の値は、オプションのグループ(US ZIP+4)との一致がなかったことを表します。ZIP+4 が存在しないケースを簡単に検出できるように、式をそのままにしておく必要があると思います。

于 2012-04-26T04:38:16.560 に答える
0

答えはノーです。パターンの括弧を目視検査すると、4 番目の一致は -1234 (4 つの追加の郵便番号 - 正式に何と呼ばれているかわかりません) であり、あなたの例では空です。あなたが実際に何をキャプチャしたいのか、あなたの質問からは少し不明です。役に立つと思われる構成を残します。

(?: ...)

括弧の後にある場合は?:、キャプチャを行うべきではないことを示しています。これを「dash-four-digit」サブパターンの前に追加できますが、 には追加されませんmatches

于 2012-04-26T04:39:55.413 に答える
0
^((\d{5})?(.*+))$

http://rubular.com/r/bZJe4p1k9O

于 2012-04-26T04:33:29.680 に答える