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