以下IP模型没有问题(例如):
255.3.3.6
由此RE(来自:http://www.mkyong.com/regular-expressions/how-to-validate-ip-address-with-regular-expression/):
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])$";
但我希望有一个IP模式来处理一个IP,如下面的模型:
255.*.3.100
OR
*.*.3.100
OR
*.*.*.*
(IP中的任何地方,可以是明星)
我使用这种模式:
"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.|(\\*)\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.|(\\*)\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.|(\\*)\\." +
"([01]?\\d\\d?|2[0-4]\\d|25[0-5])|(\\*)\\.$";
但它不起作用。
我认为我的模式中的明星被认为是一个量词。 我该怎么办?请帮助我。
答案 0 :(得分:1)
星号是另一种选择。撰写不重复。
String group = "(?:[01]?\\d\\d?|2[0-4]\\d|25[0-5]|\\*)";
String patstr = "^" + group + "(\\." + group + "){3}$";
Pattern pat = Pattern.compile( patstr );
Matcher mat = pat.matcher( args[0] );
System.out.println( mat.matches() );
OP的正则表达式表示的语法可以写成
IP ::= DP
|APDP
|APDP
|APD
|AP
D ::= Number
P ::= '.'
A ::= '*'
请注意,运营商|
会分隔替代方案;因此没有有效的地址匹配,也没有数字被星号代替的地址。