[英]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.