在java中使用Pattern

时间:2016-05-01 04:39:56

标签: java regex match

我在java中练习Pattern类,例如,给定一个String:

String text = "1234bbbbAAAAb2222 /*1231232132131221*/ [11] }";

输出应为:

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

如何使用正则表达式使用Pattern执行此操作,以便根据原始文本中的顺序打印所有内容?

我的输出没有按顺序执行:

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

2 个答案:

答案 0 :(得分:1)

正则表达式很好,但有时它只是走得那么远。虽然使用正则表达式可以做到这一点,但我认为手动解析它会容易得多。只需遍历字符串并将其拆分为段。如果您需要有关如何进行高级手动解析的参考,可以查看我的VParser库:https://github.com/ViperLordX/VParser/blob/master/src/viperlordx/parser/VParser.java

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

答案 1 :(得分:1)

试试这个。

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: }