1

我有以下字符串和模式:

String  = <html><body><input type="hidden" name="AvailabilityInputScheduleSelectView$market1" value="5~76AB~|VY~8001~"></input></body></html>
Pattern = AvailabilityInputScheduleSelectView$market1" value="(.*)|VY~(.*)~

我期望:

m.group(0) = 5~76AB~ (匹配第一个 (.*) 的字符)

m.group(1) = 8001(匹配第二个 (.*) 的字符)

但我得到:

m.group(0) = VY~8001~

m.group(1) = null

m.group(2) = 8001

如果我只有 2 个模式 (.*),我怎样才能得到 3 个组 (0,1,2)?

我尝试了很多组合,但我无法获得预期的结果。

我不知道在模式中使用不允许的字符是否有问题。我尝试使用引用方法,但它不起作用。

有谁能够帮我?

4

2 回答 2

4

group(0)总是返回整个匹配的表达式,和group()不带参数调用一样。然后
,您的两组将分别分组。 12

您的一个组的原因null是因为|,它在正则表达式中具有特殊含义,意思是or。由于每次只有一侧or会匹配,要么 要么group(1)group(2)return null,取决于哪一侧不匹配。要获得您期望的结果,请将 , 更改|为, 以逐字\\|匹配字符。|

于 2012-09-08T10:41:00.707 回答
1

在字符串的末尾添加了转义符$和并开始。|

String str = "<html><body><input type=\"hidden\" name=\"AvailabilityInputScheduleSelectView$market1\" value=\"5~76AB~|VY~8001~\"></input></body></html>";
Matcher m = Pattern.compile(".*AvailabilityInputScheduleSelectView\\$market1\" value=\"(.*)\\|VY~(.*)~.*").matcher(str);
if (m.matches()) {
    System.out.println("Everything " + m.group(0));
    System.out.println("1st group: " + m.group(1));
    System.out.println("2nd group: " + m.group(2));
}

输出:

Everything <html>..
1st group: 5~76AB~
2nd group: 8001

虽然使用正则表达式解析 HTML 确实是个坏主意

于 2012-09-08T10:58:07.177 回答