java - 解析选项字符串的正则表达式

标签 java regex

我正在使用 Java 匹配器来尝试匹配以下内容:

@tag TYPE_WITH_POSSIBLE_SUBTYPE -PARNAME1=PARVALUE1 -PARNAME2=PARVALUE2: MESSAGE

TYPE_WITH_POSSIBLE_SUBTYPE 由带句点的字母组成。

每个参数都必须由字母组成,每个值都必须由数字/字母组成。可以有 0 个或多个参数。 最后一个参数值之后紧接着是分号、空格,其余部分被视为消息。

一切都需要分组。

我当前的正则表达式(作为 Java 文字)是:

(@tag)[\\s]+?([\\w\\.]*?)[\\s]*?(-.*=.*)*?[\\s]*?[:](.*)

但是,我一直将所有参数作为一组进行获取。如果可能的话,如何将每个组作为一个单独的组?

我不太用正则表达式,所以我总是把事情搞砸。

最佳答案

如果要单独捕获每个参数,则必须为每个参数都有一个捕获组。当然,你不能这样做,因为你不知道会有多少个参数。我推荐一种不同的方法:

Pattern p = Pattern.compile("@tag\\s+([^:]++):\\s*(.*)");
Matcher m = p.matcher(s);
if (m.find())
{
  String[] parts = m.group(1).split("\\s+");
  for (String part : parts)
  {
    System.out.println(part);
  }
}
System.out.printf("message: %s%n", m.group(2));

数组中的第一个元素是您的类型名称,其余(如果还有)是参数。

关于java - 解析选项字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/514407/

相关文章:

JavaScript 的 Java ScriptEngine : using XML

regex - 如何获取使用 bash 构建正则表达式的 TLD 列表?

Javascript 正则表达式 - 当没有尾随空格时如何匹配

java - 为什么需要转换 Java 泛型方法参数类

java - JSTL - 格式编号 : how to show phone number in (###) ####### format

java - 没有参数时如何获取泛型类?

c# - c# 中的正则表达式负前瞻

java - 正则表达式检查包含空格和特殊字符的字符串

regex - 如何创建一个正则表达式来查找任意组合中的单词?

java - 我正在尝试从类(Starting.java)打开一个类(FlappyBird.java),但我无法使用 "new game().setvisible(true)"