在java中使用模式
我正在用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: } 我如何使用正则表达式处理模式,以便所有内容都按照原始文本中的顺序打印 我的
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
匹配的整个字符串。