我試圖提取使用$()
構造字符串引用的屬性的名稱。例如,如果bb=xo-xo
,則"aa$(bb)aa"
擴展爲"aaxo-xoaa"
。Java正則表達式 - 什麼是錯的這個代碼
下面是代碼:
public static void main(String[] args) {
final String PROPERTY_NAME_REGEX = "\\w+(?:\\.\\w+)*";
final String PROPERTY_REFERENCE_REGEX = "\\$\\((" + PROPERTY_NAME_REGEX + ")\\)";
Pattern pattern = Pattern.compile(PROPERTY_REFERENCE_REGEX);
String value = "hhh $(aa.bbcc.dd) @jj $(aakfd) j";
Matcher matcher = pattern.matcher(value);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
System.out.println(String.format("\"%s\" at [%d-%d)",
matcher.group(),
matcher.start(),
matcher.end()));
for (int i = 0; i < matcher.groupCount(); ++i) {
System.out.println(String.format("group[%d] = %s", i, matcher.group(i)));
}
}
}
並顯示:
"$(aa.bbcc.dd)" at [4-17)
group[0] = $(aa.bbcc.dd)
"$(aakfd)" at [22-30)
group[0] = $(aakfd)
但我希望得到以下的輸出:
"$(aa.bbcc.dd)" at [4-17)
group[0] = aa.bbcc.dd
"$(aakfd)" at [22-30)
group[0] = aakfd
我在做什麼錯?
「有些人,當與面對問題,想'我知道,我會用正則表達式。'現在他們有兩個問題。「 - Jamie Zawinski – nfechner 2012-03-04 19:08:48
「美麗在旁觀者的眼中」。 – mark 2012-03-04 19:10:35
看看for循環。組索引從1開始,括起來的是括號 – Omnaest 2012-03-04 19:18:13