删除java速度变慢_Java正则表达式运行速度很慢

我试图在

Java中使用

Daring Fireball Regular Expression for matching URLs,并且我发现一个URL,导致评估永远.我修改了原来的正则表达式以使用Java语法.

private final static String pattern =

"\\b" +

"(" + // Capture 1: entire matched URL

"(?:" +

"[a-z][\\w-]+:" + // URL protocol and colon

"(?:" +

"/{1,3}" + // 1-3 slashes

"|" + // or

"[a-z0-9%]" + // Single letter or digit or '%'

// (Trying not to match e.g. "URI::Escape")

")" +

"|" + // or

"www\\d{0,3}[.]" + // "www.","www1.","www2." … "www999."

"|" + // or

"[a-z0-9.\\-]+[.][a-z]{2,4}/" + // looks like domain name followed by a slash

")" +

"(?:" + // One or more:

"[^\\s()<>]+" + // Run of non-space,non-()<>

"|" + // or

"\\((?:[^\\s()<>]+|(?:\\([^\\s()<>]+\\)))*\\)" + // balanced parens,up to 2 levels

")+" +

"(?:" + // End with:

"\\((?:[^\\s()<>]+|(?:\\([^\\s()<>]+\\)))*\\)" + // balanced parens,up to 2 levels

"|" + // or

"[^\\s`!\\-()\\[\\]{};:'\".,<>?«»“”‘’]" + // not a space or one of these punct chars (updated to add a 'dash'

")" +

")";

// @see http://daringfireball.net/2010/07/improved_regex_for_matching_urls

private static final Pattern DARING_FIREBALL_PATTERN = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);

如果我尝试运行以下操作,它将永远存在.我把它缩小到了平衡括号的匹配(我想).如果你更改了括号内的文本,它的工作正常,但是大约15个字符,它开始慢下来.

final Matcher matcher = pattern.matcher("https://goo.gl/a(something_really_long_in_balanced_parens)");

boolean found = matcher.find();

有没有办法来改善这个正则表达式,以至于不会永远存在的线条?我在JUnit测试类中有大约100个不同的URL,我需要继续工作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值