【发布时间】:2011-09-11 22:21:55
【问题描述】:
在我的应用程序中,如果它大于 10(示例)字符,我需要获取链接并断开它。 问题是,如果我将整个文本,例如:“这是我的网站 www.stackoverflow.com”直接发送到这个匹配器
Pattern patt = Pattern.compile("(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\".,<>???“”‘’]))");
Matcher matcher = patt.matcher(text);
matcher.replaceAll("<a href=\"http://$1\" target=\"_blank\">$1</a>");
它将显示整个网站,而不会破坏它。
我试图做的是获得 1 美元的价值,所以我可以打破第二个,保持第一个正确。
我还有另一种方法可以拆线。
更新
我想要的只是网站,所以我毕竟可以破坏它。这对我有很大帮助。
【问题讨论】:
-
我见过的最糟糕的正则表达式。
-
我不确定我能否理解您的目标。您能否发布示例输入和预期输出?
-
如果您只是简单地将您从字符串中提取的 http 部分输出到一个变量,然后通过一个单独的函数将该变量分成 10 个字符片段,而不是继续添加到如果可能的话,该正则表达式并在一行中完成。事实上,我不敢相信您正在认真考虑如何添加到该模式。