我解析字符串,並捕捉一些值:這正則表達式捕獲錯誤的號碼組
FREQ = WEEKLY; WKST = MO; BYDAY = 2TU,2WE
我想捕捉2組:
grp 1: 2, 2
grp 2: TU, WE
數字代表間隔。恩,我們代表工作日。我需要兩個。
我使用這個代碼:
private final static java.util.regex.Pattern regBYDAY = java.util.regex.Pattern.compile(".*;BYDAY=(?:([+-]?[0-9]*)([A-Z]{2}),?)*.*");
String rrule = "FREQ=WEEKLY;WKST=MO;BYDAY=2TU,2WE";
java.util.regex.Matcher result = regBYDAY.matcher(rrule);
if (result.matches())
{
int grpCount = result.groupCount();
for (int i = 1; i < grpCount; i++)
{
String g = result.group(i);
...
}
}
grpCount == 2 - 爲什麼?如果我正確地閱讀了java文檔(這一點),我應該得到5? 0 =整個表達式,1,2,3,4 =我的截圖2,2,TU和WE。
result.group(1)==「2」;
我是一個C#程序員,擁有很少的Java經驗,所以我在「正則表達式工作臺」中測試了RegEx--一個用於測試RegEx的出色C#程序。我的RegEx工作正常。
https://code.msdn.microsoft.com/RegexWorkbench
RegExWB:
.*;BYDAY=(?:([+-]?[0-9]*)([A-Z]{2}),?)*.*
Matching:
FREQ=WEEKLY;WKST=MO;BYDAY=22TU,-2WE,+223FR
1 => 22
1 => -2
1 => +223
2 => TU
2 => WE
2 => FR
我不知道是什麼工具在java中可以滿足你的需求,但是一個線索是你的正則表達式只有2個捕獲組:'([+ - ]?[0-9] *)'和'([AZ] {2})' – Johrn 2010-02-18 18:59:57
是的 - 那是真的。一個用於間隔,一個用於平日。在C#(.net)中,當正則表達式有更多的命中時,我會在我的捕獲組中獲得一個結果數組。就像在RegExWB示例中一樣。第1組有三個命中,第2組也有。這也可以用Java? – Arthur 2010-02-18 19:04:12