我在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: }
答案 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: }