我正在尝试为下面的字符串模式
编写正则表达式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")
我错在哪里,提前谢谢
答案 0 :(得分:0)
从你的例子来看,很难说你试图实现的目标是一些评论如何改进正则表达式:
你的正则表达式有几个奇怪的东西
(.)*
如果您以后不想使用结果(?:)
或至少更改为(.*)
<\\S+?>
更好地表达为<[^>]+>
与大多数匹配器一样,您使用的是非贪婪的方法,您可能会遇到一个糟糕的回溯问题,可以通过更改正则表达式来避免这种情况。
答案 1 :(得分:0)
如果你将你的正则表达式改为ie * at end
,它应该可行String pattern = "\\{(((.)*?(<\\S+?>)?)+?)\\}\\?*";
或只是
String pattern = "\\{.*?(\\})(\\?)*";