正規表現検証IPV 4アドレス機能の実例分析
本明細書の例は、正規表現検証IPV 4アドレス機能を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
IPV 4アドレスは4つのグループの数字からなり、各グループの数字の間は.で区切られ、各グループの数字の取得範囲は0-255である。
IPV 4は以下の4つの規則を満たさなければならない。
1、いずれかの1桁または2桁の数字、すなわち0-99;
2、いずれか1で始まる3桁の数字、すなわち100-119。
3、いずれも2で始まり、2番目の数字は0-4の間の3桁の数字、すなわち200-249です。
4、いずれも25で始まり、3桁目の数字は0-5の間の3桁の数字、つまり250-255です。
このようにルールを全部羅列して正規表現を作ると考えがはっきりします。
まず第一条の規則を満たすのは、\d{1,2}です。
まず第二条の規則を満たすのは、1\d{2}である。
まず第三条の規則を満たすのは、2[0-4]\dです。
まず第四条の規則を満たすのは、25[0-5]である。
それらを組み合わせると、0-255の数値にマッチする正規表現が得られます。
(\d{1,2})|(1\d{2})|(2[0-4]\d)124;(25[0-5])
IPV 4は、このような4つのグループの数字からなり、中間は.仕切り、または3つの数字と文字のセットからなるので、IPV 4にマッチする正規表現は以下の通りである。
(\\d{1,2}(\\d{2})|(2[0-4]\d)|(25[0-5])))}{3}(\\d{1,2}}|(1\d{2})|(2[0-4]\d)|(2[0]
Javaテストコードは以下の通りです。
23.255
0.0.00
この正則には境界マッチングを使わないと第二のテストIP 255.255.0.256のようにマッチングされます。マッチングの結果は255.255.0.25です。制限条件を追加することができます。前後または境界、または数字ではなく前後で検索し、前後で検索します。すなわち、
(?<=\\b|\\D)((\\d{1,2})𞓜(1\d{2})𞓜(2[0-4]\d)124;(25[0-5])/{3}(\\\"(\\d{1,2])|(2\")||(2[0-4]/($b|\\D)
Stering regex="(?<=(\\b(\\d{1,2}(\\\\d{2})𞓜(2[0-4]\\d)|(25[0-5])\.){3}(\\\d{1,2}|(1\\d{2})(1245)(\\4))}(\\5)))/(\\4))/(\\4))))////(\\5)b|\\D)「
これでこの問題を解決できます。
PS:ここでもう2つの非常に便利な正規表現ツールを提供します。
JavaScript正規表現はオンラインテストツールです。
http://tools.jb51.net/regex/javascript
正規表現のオンライン作成ツール:
http://tools.jb51.net/regex/create_reg
本論文で述べたように、皆さんの正規表現学習に役に立ちます。
IPV 4アドレスは4つのグループの数字からなり、各グループの数字の間は.で区切られ、各グループの数字の取得範囲は0-255である。
IPV 4は以下の4つの規則を満たさなければならない。
1、いずれかの1桁または2桁の数字、すなわち0-99;
2、いずれか1で始まる3桁の数字、すなわち100-119。
3、いずれも2で始まり、2番目の数字は0-4の間の3桁の数字、すなわち200-249です。
4、いずれも25で始まり、3桁目の数字は0-5の間の3桁の数字、つまり250-255です。
このようにルールを全部羅列して正規表現を作ると考えがはっきりします。
まず第一条の規則を満たすのは、\d{1,2}です。
まず第二条の規則を満たすのは、1\d{2}である。
まず第三条の規則を満たすのは、2[0-4]\dです。
まず第四条の規則を満たすのは、25[0-5]である。
それらを組み合わせると、0-255の数値にマッチする正規表現が得られます。
(\d{1,2})|(1\d{2})|(2[0-4]\d)124;(25[0-5])
IPV 4は、このような4つのグループの数字からなり、中間は.仕切り、または3つの数字と文字のセットからなるので、IPV 4にマッチする正規表現は以下の通りである。
(\\d{1,2}(\\d{2})|(2[0-4]\d)|(25[0-5])))}{3}(\\d{1,2}}|(1\d{2})|(2[0-4]\d)|(2[0]
Javaテストコードは以下の通りです。
public static void matchAndPrint(String regex, String sourceText){
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(sourceText);
while(matcher.find()){
System.out.println(matcher.group());
}
}
public static void main(String[] args) {
String regex = "^(((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))$";
matchAndPrint(regex, "23.135.2.255");
matchAndPrint(regex, "255.255.0.256");
matchAndPrint(regex, "0.0.0.0");
}
出力結果は以下の通りです。23.255
0.0.00
この正則には境界マッチングを使わないと第二のテストIP 255.255.0.256のようにマッチングされます。マッチングの結果は255.255.0.25です。制限条件を追加することができます。前後または境界、または数字ではなく前後で検索し、前後で検索します。すなわち、
(?<=\\b|\\D)((\\d{1,2})𞓜(1\d{2})𞓜(2[0-4]\d)124;(25[0-5])/{3}(\\\"(\\d{1,2])|(2\")||(2[0-4]/($b|\\D)
Stering regex="(?<=(\\b(\\d{1,2}(\\\\d{2})𞓜(2[0-4]\\d)|(25[0-5])\.){3}(\\\d{1,2}|(1\\d{2})(1245)(\\4))}(\\5)))/(\\4))/(\\4))))////(\\5)b|\\D)「
これでこの問題を解決できます。
PS:ここでもう2つの非常に便利な正規表現ツールを提供します。
JavaScript正規表現はオンラインテストツールです。
http://tools.jb51.net/regex/javascript
正規表現のオンライン作成ツール:
http://tools.jb51.net/regex/create_reg
本論文で述べたように、皆さんの正規表現学習に役に立ちます。