繁体   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