我有以下字符串和模式:
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)?
我尝试了很多组合,但是我无法获得预期的结果。
我不知道在模式中使用不允许的字符是否有问题。我尝试使用引用方法,但它不起作用。
有人能帮助我吗?
答案 0 :(得分:3)
group(0)
总是返回整个匹配的表达式,与调用不带参数的group()
相同。
然后,您的两个小组将分别位于小组1
和2
中。
您的某个群组null
之所以归因于|
,其在正则表达式中具有特殊含义,意味着or
。由于or
每次只会匹配一侧,group(1)
或group(2)
将返回null
,具体取决于哪一方不匹配。要获得预期效果,请将|
更改为\\|
,以便按字面匹配|
字符。
答案 1 :(得分:1)
向$
和|
添加了转义并将其消费到String的结尾。
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实际上是bad idea。