2016-07-11 9 views
3

私はIPアドレスを検証するための正規表現を書こうとしています。これは動作しますがキャプチャグループを繰り返す方法は?

は:

String reg = "((0|1)?\\d{1,2}|2[0-4]\\d|25[0-5])"; 
public String pattern = reg + "." + reg + "." + reg + "." + reg; 

これは動作していないようですし、私が間違っているのか理解していません。

String pattern = "((0|1)?\\d{1,2}|2[0-4]\\d|25[0-5]\\.){3}((0|1)?\\d{1,2}|2[0-4]\\d|25[0-5])"; 

私が行方不明です何を説明してください。あなたが正しくグループ化されていない

+0

"。" "一致するもの"を意味する場合は、 "anything anything" を意味します。 IPアドレスでは "¥"を使用します。 – dustinroepsch

+0

@WiktorStribiżew:最初の作品です。第二のものはそうではありません。私はそれの繰り返し版を書いてみたい。 {3}に何か問題がありますか? – Hooli

+0

@ DustinRyan-Roepschありがとう! – Hooli

答えて

4

:ドット\\.25[0-5]生産の一部であり、そのアドレスは、もっぱら25xのコンポーネントで構成されていない限り、それはあなたの3部構成のグループの中央に一致しないでしょう。

ドットがグループカッコの外側に追加されているため、最初の正規表現ではこの問題は発生しません。しかし、ドットが表現が正しいもの(例えば123a210b132c210)と一緒にいくつかの間違った文字列にマッチすることを意味し、エスケープされていない

ご桁の制作を中心に、括弧を追加し、この問題が修正されています。

(((0|1)?\d{1,2}|2[0-4]\d|25[0-5])\.){3}((0|1)?\d{1,2}|2[0-4]\d|25[0-5]) 
//^       ^

Demo.

+1

うわー!!働いた。ありがとう!私もそれを理解しました! – Hooli

関連する問題