繁体   English   中英

用于解析选项字符串的正则表达式

[英]Regular expression to parse option string

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

@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));

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

试试看(您可能需要添加额外的'\\'使其在字符串中起作用。

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

顺便说一句,我强烈建议您使用此站点来帮助您构建正则表达式: RegexPal 甚至更好的是RegexBuddy ; 如果您打算将来进行很多正则表达式,则值得$ 40。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM