我有点卡在正则表达式上.考虑以下代码:
String regFlagMulti = "^(\\[([\\w=]*?)\\])*?$";
String flagMulti = "[TestFlag=1000][TestFlagSecond=1000]";
Matcher mFlagMulti = Pattern.compile(regFlagMulti).matcher(flagMulti);
if(mFlagMulti.matches()){
for(int i = 0; i <= mFlagMulti.groupCount(); i++){
System.out.println(mFlagMulti.group(i));
}
}else{
System.out.println("MultiFlag didn't match!");
}
Run Code Online (Sandbox Code Playgroud)
我想要的是一个常规模式,它给我[]内的文字; 结果匹配对象的一组中的每一个.
重要提示:我不知道输入字符串中有多少[]个表达式!
对于上面的代码,它输出:
[TestFlag=1000][TestFlagSecond=1000]
[TestFlagSecond=1000]
TestFlagSecond=1000
Run Code Online (Sandbox Code Playgroud)
我不能让常规模式工作.有人有想法吗?
我想要的是一个常规模式,它可以为我提供 [ ] 内的文本;生成的 Matcher 对象组中的每个对象。
不幸的是,这不能通过 Java 正则表达式引擎来完成。在这里查看我的(类似)问题:
本组:
(\\[([\\w=]*?)\\])*
\________________/
Run Code Online (Sandbox Code Playgroud)
是组号 1,并且将始终包含该组的最后一个匹配项。
这是一个解决方案的建议,它还可以获取键/值:
String regFlagMulti = "(\\[(\\w*?)=(.*?)\\])";
String flagMulti = "[TestFlag=1000][TestFlagSecond=1000]";
Matcher mFlagMulti = Pattern.compile(regFlagMulti).matcher(flagMulti);
while (mFlagMulti.find()) {
System.out.println("String: " + mFlagMulti.group(1));
System.out.println(" key: " + mFlagMulti.group(2));
System.out.println(" val: " + mFlagMulti.group(3));
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
输出:
String: [TestFlag=1000]
key: TestFlag
val: 1000
String: [TestFlagSecond=1000]
key: TestFlagSecond
val: 1000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |