2

そこで私は、米国中のさまざまな銀行情報を取得する PHP スクリプトを 3 日間続けて使用しました。アドレスの開始を除いて、私がプルしているすべての単一の値が機能します。

これは完璧である必要はありません。簡単にするために > と < の記号を削除しています。これらは、一致させる必要があるものの例です。大なり小なりの文字を後から削除するコードを作成しました。Way、Street、St.、St、Avenue、Ave、Ave.、Road、Rd、で終わる住所のみに関心があることに注意してください。 Rd., Highway, Hwy, Hwy, Boulevard, Bvd, Bvd., Crescent, Cres., Cres など

         >20 Cross Street<
         >1 Dillinger Avenue<
         >189 Beautiful Way<
         >5768 Some Longer Address That Is Crazy Like Ave.<
         >857489 Monkey On My Back Highway<
         >378 My Pants Are Ablaze Boulevard<

これが私がこれまでに持っているものです。

     '~>[0-9]{1-7}.*\s[Street|St.|St|Road|Rd|Rd.]<~'
4

4 に答える 4

1

ドットをエスケープし、{1-7} のダッシュをコンマ {1,7} に置き換えます

[0-9]{1,7}.*\s(?:Street|St\.|St|Road|Rd|Rd\.)
于 2013-11-01T21:11:24.540 に答える
0

少なくとも 1 つの重要な変更といくつかの小さな変更を行う必要があります。

'~>[0-9]{1,7}.*\s(?:Street|St\.?Road|Rd\.?)<~'
                 ^^                          ^

あなたの式では、文字クラスを使用しましたが、文字クラス内のすべてが文字どおりに解釈され、単語ではなく文字のセットであるため、これは間違っています。

{1-7}は間違ってい{1,7}ます。直前のものに 1 ~ 7 回一致させるために使用されます。

また、これらは特別な意味を持つため直接使用することはできない.ため、このようにエスケープする必要があります\.

つまり、単語全体ではなく個々の文字に一致し、文字どおり[Street|St.|St|Road|Rd|Rd.]に一致することさえあります。|

于 2013-11-01T20:59:33.030 に答える
0

これは正規表現ではありませんが、住所を解析するための解決策ですか?

Steet Address をコンポーネントに解析する

これで問題が解決しない場合でも、正規表現はこの問題の間違った解決策です。パーサーまたは文法が必要です。正規表現よりも洗練されたもの。

これを正規表現で解決しようとすると、気が狂ってしまうでしょう。

于 2013-11-01T21:30:31.600 に答える