我试图匹配这些字符序列:
sender=11&receiver=2&subject=3&message=4
sender=AOFJOIA&receiver=p2308u48302rf0&subject=(@#UROJ)(J#OFN:&message=aoefhoa348!!!
(key,val)对之间的分隔符是'&'字符。 我想以一种可以访问密钥和每对价值的方式对它们进行分组。
我尝试过类似的事情:
([[:alnum:]]+)=([[:alnum:]]+)
然后我想念:
subject=(@#UROJ)(J#OFN:
我无法找到允许接受这些类型字符的方法。
更具体地说,如果有n
对键值,我希望有n
个匹配,每个匹配2个组 - 1个用于键,1个用于值。
如果你帮我解决这个问题,我很高兴。
谢谢
答案 0 :(得分:1)
https://regex101.com/r/hN7qG9/1
我想这会解决你的问题:
/([?^ =&安培;] +)(=([^&安培;] *))?/ IG
<强>输出:强>
sender = 11
接收器= 2
subject = 3
消息= 4
发件人= AOFJOIA
接收机= p2308u48302rf0
受试者=(@#UROJ)(J#OFN:
消息= aoefhoa348 !!!
你可以接受每一个模式:
current_string
func(2,4,'bca')
&#13;
$1 - first pattern (sender)
$2 - second pattern (=11)
$3 - second pattern without '='(11)
&#13;
答案 1 :(得分:0)
示例中的所有特殊字符都会在“标点符号”组中出现,请参阅:
https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
如果仍然不够,您可以尝试制作自己的角色正则表达式类。喜欢[@#etc ...]。请记住,您必须使用额外的/.
来转义特殊的java字符答案 2 :(得分:0)
String req = "sender=AOFJOIA&receiver=p2308u48302rf0&subject=(@#UROJ)(J#OFN:&message=aoefhoa348!!!";
Pattern p = Pattern.compile("([\\w]+)=([^&]+)");
Matcher m = p.matcher(req);
while (m.find()){
System.out.println("key = " + m.group(1)); // key
System.out.println("value = " + m.group(2)); // value
}
您应该为键/值对的“值”组定义自己的字符类。
例如,它可能是[\w!"#$%'()*+,-./:;<=>?@[]^_`{|}~]
或[\w@()#:!]
或简单如下:[^&]
。
我认为[^&]
字符类是最合适的,因为你不知道所有可能属于“值”部分的字符。