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