2013-03-20 230 views
0

有人可以用正則表達式來幫助我匹配一系列IP。它應該像本場比賽的東西:正則表達式匹配IP範圍?

"203.0.113.0-203.0.113.255" 

我嘗試以下,但只有單個IP匹配:

 
((?:\\d{1,3}\\.){3}\\d{1,3})(?:/((?:(?:\\d{1,3}\\.){3}\\d{1,3})|\\d{1,2}))? 

回答

0

如果你有正則表達式將匹配單個IP,然後只需添加-和重複你的正則表達式

String singleIPRegex = "yourRegex"; 
String rangeRegex = singleIPRegex + "-" + singleIPRegex; 

if (someString.matches(rangeRegex)){ 
    //do your stuff 
} 

另外,作爲singleIPRegex可以使用

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

部分

([01]?\\d{1,2}|2[0-4]\\d|25[0-5]) 

將接受:

  • [01]?\\d{1,2} - >範圍0-199包括數字開始使用0或00類似01,001
  • 2[0-4]\\d - >範圍200-249
  • 25[0-5] - >範圍250-255
2

可以在2個分量

String[] splitResult = ipRange.split("-"); 

和分割字符串然後對每個子串使用此模式

string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" 

你的模式實際上將無法正常工作,由於每個IP節只上升到255

0

試試這個:((?:\d{1,3}\.){3}\d{1,3})(?:/((?:(?:\d{1,3}\.){3}\d{1,3})|\d{1,2})){2}

0

嘗試了這一點:

String data = "This http://example.com is a sentence 203.0.113.0-203.0.113.255 https://secure.whatever.org that contains 2 URLs."; 


    Pattern pattern = Pattern.compile("\\s((\\d{1,4}\\.?){4}-(\\d{1,4}\\.?){4})\\s"); 
    Matcher matcher = pattern.matcher(data); 

    while (matcher.find()) { 
     System.out.println(matcher.group(1)); 
    } 

希望這有助於。