簡體   English   中英

%etd(msg01)正則表達式?

[英]%etd(msg01) regular expression?

我正在嘗試為String寫一個正則表達式,如%etd(msg01)

String string = "My name is %etd(msg01) and %etd(msg02)";
Pattern pattern = Pattern.compile("%etd(.+)");
Matcher matcher = pattern.matcher(string);

while(matcher.find()) {
   System.out.println(matcher.group());
}

它輸出%etd(msg01) and %etd(msg02) 但是,我希望它分別打印%etd(msg01) %etd(msg02) 我的意思是我正在尋找非貪婪的比賽。

在這種情況下,應如何更改正則表達式以使其不貪婪?

您應該使用此正則表達式:

Pattern pattern = Pattern.compile("%etd\\([^)]+\\)");

請在。*或。+后面打一個問號,以使其不貪心。 這應該為您工作...

Pattern pattern = Pattern.compile("%etd\\\\(.+?\\\\)");

在左括號和右括號之前也需要雙斜杠,因為它們在正則表達式中具有特殊含義。

如果您確定自己的名字在第一個名字之后不包含開放的括號,則另一種使用方法如下。

Pattern pattern = Pattern.compile("%etd\\\\([^(]+\\\\)");

暫無
暫無

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

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