【问题标题】:Using Pattern in java [closed]在java中使用模式[关闭]
【发布时间】:2016-05-01 04:39:55
【问题描述】:

我正在用 java 中的 Pattern 类练习,例如,给定一个字符串:

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

【问题讨论】:

  • 向我们的 Java 程序员展示你的程序,然后它就可以进入下一个级别。

标签: java regex match


【解决方案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: }

【讨论】:

  • 谢谢!你能告诉我 group() 做什么吗?为什么它从 1 开始?
  • 例如,m.group(1) 返回匹配的字符串,其模式包含在第一个括号中(即(\\d+))。 m.group(0) 返回与 pat 匹配的整个字符串。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多