在java中使用模式

在java中使用模式,java,regex,match,Java,Regex,Match,我正在用java练习模式类,例如,给定一个字符串: String text = "1234bbbbAAAAb2222 /*1231232132131221*/ [11] }"; 输出应为: Number: 1234 String: bbbbAAAAb Number: 2222 Commment: /*1231232132131221*/ Symbol: [ Number: 11 Symbol: ] Symbol: } 我如何使用正则表达式处理模式,以便所有内容都按照原始文本中的顺序打印 我的

我正在用java练习模式类,例如,给定一个字符串:

String text = "1234bbbbAAAAb2222 /*1231232132131221*/ [11] }";
输出应为:

Number: 1234
String: bbbbAAAAb
Number: 2222
Commment: /*1231232132131221*/
Symbol: [
Number: 11
Symbol: ]
Symbol: }
我如何使用正则表达式处理模式,以便所有内容都按照原始文本中的顺序打印

我的输出不正常:

Number: 1234
Number: 2222
Number: 11
String: bbbbAAAAb
Commment: /*1231232132131221*/
Symbol: [
Symbol: ]
Symbol: }

正则表达式是很好的,但有时它只是走这么远。虽然使用正则表达式可以做到这一点,但我认为手动解析它要容易得多。只需迭代字符串并将其拆分为段。如果您需要一些关于如何进行高级手动解析的参考资料,可以查看我的VParser库:

但是,如果您确实想使用正则表达式,我建议您使用捕获组来获取它找到模式的顺序。

试试这个

String text = "1234bbbbAAAAb2222 /*1231232132131221*/ [11] }";
Pattern pat = Pattern.compile("(\\d+)|([a-zA-Z]+)|(/\\*.*?\\*/)|([\\[\\]{}])");
Matcher m = pat.matcher(text);
while (m.find()) {
    if (m.group(1) != null)
        System.out.println("Number: " + m.group(1) );
    else if (m.group(2) != null)
        System.out.println("String: " + m.group(2) );
    else if (m.group(3) != null)
        System.out.println("Comment: " + m.group(3) );
    else if (m.group(4) != null)
        System.out.println("Symbol: " + m.group(4) );
}
结果:

Number: 1234
String: bbbbAAAAb
Number: 2222
Comment: /*1231232132131221*/
Symbol: [
Number: 11
Symbol: ]
Symbol: }

向我们的java程序员展示你的程序,然后它可以被带到下一个层次。谢谢!你能告诉我group()是做什么的吗?为什么它是从1开始的?例如,
m.group(1)
返回匹配的字符串,其模式包含在第一个括号中(即
(\\d+)
m.group(0)
返回与
pat
匹配的整个字符串。