簡體   English   中英

代碼中的Java修復正則表達式

[英]Java fix regex in code

我需要打印@OPOK ,但是在以下代碼中:

String s = "\"MSG1\":\"00\",\"MSG2\":\"@OPOK\",\"MSG3\":\"XXXXXX\"}";

Pattern pattern = Pattern.compile(".*\"MSG2\":\"(.+)\".*");
Matcher matcher = pattern.matcher(s);

if (matcher.find()) {
    System.out.println(matcher.group(1));
} else {
    System.out.println("Match not found");
}

我收到@OPOK”,“ MSG3”:“ XXXXXX” ,如何修復我的圖案?

您可能需要以下內容:

Pattern pattern = Pattern.compile("\"MSG2\":\"([^\"]+)\"");

對於您感興趣的捕獲組,它將匹配除雙引號之外的任何字符。 由於該組被雙引號引起來,因此應防止其在比賽中“走得太遠”。

編輯添加 :如評論中@ bmorris591所建議,您可以添加一個額外的+ (如下所示)以使量詞所有格 如果匹配器找不到匹配項,這可能有助於提高性能。

Pattern pattern = Pattern.compile("\"MSG2\":\"([^\"]++)\"");

您想讓您的.+部分不願使用 默認情況下,它是貪婪的-它會盡可能地匹配,而不會阻止模式匹配。 你想讓它盡可能少的 ,因為它可以,符合這樣的:

Pattern pattern = Pattern.compile(".*\"MSG2\":\"(.+?)\".*");

? 是什么讓它不願意。 有關更多詳細信息,請參見Pattern文檔。

或者,當然,您可以將其與“除了雙引號之外的任何字符”匹配,這就是Brian的方法所要做的。 據我所知,兩者都將同樣有效。 它們之間可能存在性能差異(老實說,我希望Brian的性能更好),但是如果性能對您很重要,則應該測試兩種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM