簡體   English   中英

正則表達式問題模式匹配

[英]Regular Expression issue pattern matching

我正在嘗試為以下字符串模式編寫正則表達式

String str = "<name>{f:<one>,l:<two>,t:<three>} )";

此模式以“?”結尾 所以下面的代碼有效

String result = str.replaceAll(pattern, "abc");
System.out.println(result);

輸出是

<name> ( abc abc)

但是如果輸入字符串改變

下一個模式不以?結尾的地方,Java掛起了.....

String result = str.replaceAll(pattern, "abc"); 
System.out.println(result);

等效的Scala代碼是

pattern.replaceAllIn(str,"abc")

我在哪里錯了,先謝謝

從您的示例中很難看出您要實現的目標,這里有一些說明可以改善正則表達式:

正則表達式中有幾件奇怪的事情

  • 如果您不想在以后使用(?:)或至少更改為(.*)來使用結果,則(.)*可以創建無數個相對昂貴的捕獲組(.*)
  • <\\\\S+?>最好表示為<[^>]+>

與大多數匹配器一樣,您使用的是非貪婪方法,因此可能會遇到回溯問題,可以通過更改正則表達式來避免。

如果將正則表達式更改為ie *,它將正常工作

String pattern = "\\{(((.)*?(<\\S+?>)?)+?)\\}\\?*";

或簡單地

String pattern = "\\{.*?(\\})(\\?)*";

暫無
暫無

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

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