我已經在Java中編寫了一個reg表達式,它驗證給定的地址,然後創建將分隔出街道號&名稱,城市,州&郵政編碼的組。Java正則表達式輸出
我的代碼如下:
String address = "1600 Pennsylvania Ave NW, Washington, DC 20500";
String regex = "(\\s*\\d*\\s*,?\\s*(\\w*\\s*)+),?\\s*(\\w*\\s*)+\\s*,?\\s*(\\w{2})?\\s*,?\\s*(\\d{5})?\\s*";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(address);
if (matcher.matches()) {
int groupCount = matcher.groupCount();
System.out.println(groupCount);
for (int i=0; i<=groupCount;i++) {
String group = matcher.group(i);
System.out.println(group);
}
} else {
System.out.println("Does not matches");
}
代碼的輸出如下所示:
5
1600 Pennsylvania Ave NW, Washington, DC 20500
1600 Pennsylvania Ave NW
DC
20500
據我所知,在將O第二線/ P是作爲第一組整個字符串本身按照Javadocs。但是我無法理解的是,爲什麼「華盛頓」沒有被印刷。相反,有2個空間被打印。
有人可以向我解釋這裏有什麼問題嗎?
更多信息:我在期待用戶可能會在地址字符串中輸入(逗號),或者他們可能不會。用戶可以在兩個單詞之間放置多個空格。該州將永遠是一個州代碼。
感謝 拉吉
http://stackoverflow.com/questions/6939526/java-regex-repeating-capturing-groups及其中的指針 – NPE 2014-09-25 18:01:05