5

基本的に、英国の郵便番号の最初の一連の文字に一致する正規表現 (簡単) と、次の番号に一致する別の正規表現 (それほど簡単ではありません) が必要です。

可能な組み合わせと一致の例:

AA9A 9AA    regex1: AA    regex2: 9
A9A 9AA     regex1: A     regex2: 9
A9 9AA      regex1: A     regex2: 9
A99 9AA     regex1: A     regex2: 99
AA9 9AA     regex1: AA    regex2: 9
AA99 9AA    regex1: AA    regex2: 99

ポスコードのスペースは、わかりやすくするためにのみ存在します。存在する場合と存在しない場合があるため、無視する必要があります。

これら 2 つの正規表現、特に regex2 (数値の一致) については、いくつかの助けを借りることができます。ちなみに、これを MySQL 5.6 で実行します。

更新:注意: 最後の 3 文字は常に無視されます。これが常に適用される唯一のパターンです。私の例からわかるはずです。

更新 2:前に十分に明確でなかった場合は申し訳ありません。郵便番号を検証する必要はありません。市外局番と地区コードを抽出する必要があります。

UPDATE3:もう一度強調する: 空白は無視する必要がありますAA99 9AAAA999AA99

更新 4:ご回答いただきありがとうございます。残念ながら、MySQL が正規表現の一致を抽出できないことがわかりました。さすが、MySQL、役に立たないことがまた証明されました。

4

4 に答える 4

5

次の正規表現を使用できます。

([A-Z]+)([0-9]+).*?[A-Z0-9]{3}

一致したグループを使用し#1#2

于 2013-10-01T13:22:05.847 に答える
2

この正規表現:

([A-Z]+)([0-9]+)([A-Z ]*[0-9][A-Z]{2})

MySQL の POSIX ERE 正規表現実装の RegexBuddy 4 シミュレーションによると、次のように動作します。

Input     G1   G2   G3
--------  ---  ---  ------
AA9A 9AA  AA   9    A 9AA
A9A 9AA   A    9    A 9AA
A9 9AA    A    9     9AA
A99 9AA   A    99    9AA
AA9 9AA   AA   9     9AA
AA99 9AA  AA   99    9AA
AA9A9AA   AA   9    A9AA
A9A9AA    A    9    A9AA
A99AA     A    9    9AA
A999AA    A    99   9AA
AA99AA    AA   9    9AA
AA999AA   AA   99   9AA

説明:

([A-Z]+)    # captures one or more letters
([0-9]+)    # captures one or more digits
(           # starts 3rd capture group
 [A-Z ]*    # captures zero or more letters or space
 [0-9]      # captures exactly one digit
 [A-Z]{2}   # captures exactly two letters
)           # ends 3rd capture group

機能しないテスト ケースを見逃した場合はお知らせください。何がで​​きるかを確認します

于 2013-10-01T14:30:37.180 に答える
1

"[A-Z](?:\\D\\d\\D|\\d\\D|\\d|\\d{2}|\\D\\d|\\D\\d\\d|EI)\\s??\\d{1}\\D{2}" 私にとっては非常にうまく機能します。ONE LINE ADDRESS から郵便番号を取得するために使用するため、少し複雑です (郵便番号の検証ではなく、都市、国、通りの名前などを含む住所全体)。本番環境で使用しています。

于 2013-10-01T13:19:43.520 に答える
0

これはあなたが探しているものだと思います:

([A-Z]{1,2})(\d+)[A-Z]?\s?\d+[A-Z]{1,2}

あなたが求めている最初の部分と2番目の部分にキャプチャグループを使用しました。郵便番号の最初の部分にある番号が必要だと思います。

于 2013-10-01T13:34:21.920 に答える