String message = "dadfagdagfghh[file=sldfkjal.jpg,url=dalfkjkt.com][file=dlafjklt.png,url=aaeiotub]"
我期待能够得到一个数组,其中包含所有 [] 中的 file 对应的值,在上面这个例子中,我期望得到的结果为: [ "sldfkjal.jpg", "dlafjklt.png" ]
上面这个例子里看着明显无意义的地方,比如 dadfagdagfghh 这种,就表示这块内容无法事先规定好,各种情况都有可能。同时 [] 这个会有多少个也无法事先规定好。
Pattern regex = Pattern.compile("file=(.*),url");
Matcher matcher = regex.matcher(message);
if(matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(1));
}
我自己现在是这么处理的。。。但是很遗憾两次 group(1) 的结果都是同一个值。。
谢谢解答
1
raymanr 2020-04-09 12:52:04 +08:00
file=(.*?),url
|
2
nortonlai 2020-04-09 13:16:45 +08:00 via Android 1
一次 find 只能捕获一个,你需要把 if 改成 while
|
3
nortonlai 2020-04-09 13:20:39 +08:00 via Android 1
//贴一个将 xml 文本里面的字段存入 map 的正则表达式使用例子 这里的 xml 并没有多级结构,也没有多余的属性
Pattern p=Pattern.compile("<(?<node>[0-9A-Za-z_]{2,50}?)>(?<val>.*?)<[/](?:[0-9A-Z_a-z]{2,50})>"); Matcher matcher = p.matcher(xml); while (matcher.find()) { String key = matcher.group("node"); String val = matcher.group("val"); result.put(key.trim(), val.trim()); } (?: 代表非捕获组 即也是组 但 find 时候忽略 (? 即对 此捕获组取名 为 node ?) 即非贪心的 最小匹配 如果正则没有详细匹配往大了写 如.* 那么最好加上 |
4
Newyorkcity OP @nortonlai 解决了,if 改 while 就行了,感谢!
|