2016-04-27 4 views
1

正規表現(?:^|[^\w])(\d{5}(?:[-\s]\d{4})?)(?:$|[^\w])があります。Java Regex - ハイフンで添付された5桁の数字を除外

米国標準の5桁の郵便番号または5 + 4桁の長い番号のいずれかを探しています。

しかし、この特定の正規表現は、次の形式の数字も5桁で一致します。

1111-11111。​​と一致します。このようなケースをどのように除外できますか?

正規表現の先頭にハイフンを追加してみましたが、そのようには効果がなかった(?:^|[^\w]|-)のようになりました。

+1

それを自分自身を修正しました。 (?:$ | [^ \ w-])(?:^ | [^ \ w - ])(\ d {5}(?:[ - \ s] \ d {4})?ハイフンを間違った場所に追加しました。 – cjawahar

+0

あなたが実際に '11111'と' 11111-1111'値のみハイフンの後を除外しますか?私はあなたが '19875-12345'で' 12345'とマッチしないように、質問を編集すると思います。 –

答えて

1

あなたが実際より短く、より読みやすい

\b(?<!-)\d{5}(?:[- ]\d{4})?(?!-)\b 

を使用することができます。 (?<!-)負のlookbehindは、(?!-)の負の先読みが値の後にないことを確認し、\bの単語境界が(?:^|\W)(?:$|\W)の非キャプチャグループを効果的に置き換えることを確認します。

regex demoを参照してください。

関連する問題