0

GWT(Java)プログラムで次の文字列パターンに一致する正規表現を作成しようとしています

パターンは、次の形式の文字列と一致する必要があります(基本的に、これは、Imが座標を取得するためにGoogleマップに送信しようとしているアドレス文字列です。

"2205 someStreet, Miami, USA"
OR
"someStreet, Miami, USA" 
OR
"Miami, USA"
OR
"2205 somestreet Miami USA "
All other variations should not be allowed

これまで、これらの正規表現を試しました

"([0-9a-zA-Z]+ ((\\s){0,1} | (,){0,1} (\\s){0,1}) [0-9a-zA-Z]$)+ "
"^[0-9a-zA-Z]+,|\\s[0-9a-zA-Z]+"

それらはいくつかの許容可能な文字列パターンに一致しますが、許容できない文字列パターンにも一致します。

だから、誰かが私にこれらを手に入れてくれるかどうか疑問に思いました。

ありがとう

4

2 に答える 2

2

コメントで述べたように、最も簡単な方法は、1つのモンスターの複雑な表現ではなく、4つの別々の正規表現を使用することです。(さらに、倍数を使用する場合は、新しい許容可能なパターンをより簡単に追加できます。)

これらのパターンは機能するはずです。

  1. 「2205someStreet、Miami、USA」の場合:\d+ \w+, [A-Za-z]+, [A-Z]+

  2. 「someStreet、マイアミ、米国」の場合:\w+, [A-Za-z]+, [A-Z]+

  3. 「米国マイアミ」の場合:[A-Za-z]+, [A-Z]+

  4. 「2205somestreetMiamiUSA」の場合:\d+ \w+ [A-Za-z]+ [A-Za-z]+\s*

\w「12th」のような番号付きの名前をサポートするために、通りの名前に使用しました。

もちろん、これらの文は、都市が1つの単語にすぎないことを前提としています。「ニューヨーク」だったら?また、通りは「123 Broadway、Denver、USA」という一言であり、「123West12thDrive」のようなものはサポートしないことも前提としています。おそらく、有効なアドレスを正確に構成するものについてもう少し考える必要があります。

Google APIは通常かなり堅牢なので、GoogleMapsAPIがアドレス形式の検出に適切な仕事をすることができると期待しています。この種の検証を行おうとすると、自分で余分な作業をしている可能性が高くなります。

于 2012-07-13T15:16:13.753 に答える
1

Stringを, 正規表現で分割し、String[3]の結果を必要に応じて段階的に分析します。

コメント後に編集

String[].lengthまた、2つ未満のものを決定するために分析する必要があり,ます。

このようにして、trim()で削除できる前後に末尾のスペースを,含めることができ、専用の単純な正規表現に集中できます。

于 2012-07-13T15:09:56.393 に答える