簡體   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