我有字符串p[name]=[1111];[2222]
,我需要从中获取3部分 p[name]=
, [1111]
和 { {1}} 即可。字符串可以是不同的,例如[2222]
或p[name]=[1111]
我正在尝试使用正则表达式,但找不到合适的解决方案
我的正则表达式是
p[name]=[1111];[2222,[1,2,3],1];[3333]
当我运行此代码时,我只有两个组
(p\\[[a-zA-Z0-9]+\\]=)(?:(\\[.[^;]+\\]);?)+
结果是
Pattern p = Pattern.compile("(p\\[[a-zA-Z0-9^=]+\\]=)(?:;*(\\[.[^;]+\\]))+");
Matcher m = p.matcher("p[name]=[1111];[2222]");
if (m.find()) {
for(int i = 1, l = m.groupCount(); i <= l; ++i) {
System.out.println(m.group(i));
}
}
答案 0 :(得分:3)
为什么不简单地这样做?
Pattern p = Pattern.compile("p\\[[a-z0-9]+]=|\\[[0-9]+]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("p[name]=[1111];[2222]");
while(m.find()) {
System.out.println(m.group());
}
但是,如果要同时检查字符串结构,可以使用这种模式:
Pattern p = Pattern.compile("(p\\[[a-z0-9]+]=)|\\G(?<!^)(\\[[0-9]+])(?:;|$)", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("p[name]=[1111];[2222]");
while(m.find()) {
System.out.println((m.group(1))? m.group(1) : m.group(2));
}
答案 1 :(得分:0)
我可以给你这个正则表达式。这应该也适用于:p [name] = [1111]; [2222,[1,2,3],1]
Pattern p = Pattern.compile("([p]+)|\[[a-z0-9\,\[\]]+\]");
Matcher m = p.matcher("p[name]=[1111];[2222]");
if (m.find()) {
for(int i = 1, l = m.groupCount(); i <= l; ++i) {
System.out.println(m.group(i));
}
}