gpt4 book ai didi

java - 正则表达式仅匹配 URL 的一部分 - 为什么?

转载 作者:行者123 更新时间:2023-12-03 19:11:17 24 4
gpt4 key购买 nike

我的正则表达式非常薄弱,我使用的正则表达式(从互联网上找到)只能部分解决我的问题。我需要使用 java 将 anchor 标记添加到文本输入的 URL。这是我的代码:

String text ="Hi please visit www.google.com";
String reg = "\\b(([\\w-]+://?|www[.])[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/)))";
String s = text.replaceAll(reg, "<a href='$1'>$1</a>");
System.out.println(""+s);

当前的输出是Hi please visit <a href='www.google.c'>www.google.c</a>om .正则表达式有什么问题?

我需要解析文本并将从文本字段输入的 URL 显示为 jsp 页面中的热链接。预期的实际输出将是

Hi please visit <a href='www.google.com'>www.google.com</a>

编辑

跟随正则表达式

(http(s)?://)?(www(\.\w+)+[^\s.,"']*)

在以 .com 结尾的 url 中就像一个魅力但在其他扩展中失败,如 .jsp .有什么方法可以让它在各种扩展中工作吗?

最佳答案

回答您为什么正则表达式不起作用的问题:它不遵守 Java 的正则表达式语法规则。

具体来说:

[^[:punct:]\s]

没有像您期望的那样工作,因为 Java 不识别像 [:punct:] 这样的 POSIX 简写。相反,它将其视为嵌套字符类。这再次导致 ^ 在该上下文中变得非法,因此 Java 忽略它,为您留下一个与

匹配的字符类
[:punct\s]

它只匹配 comc,因此在那里结束你的匹配。

关于如何在文本 block 中查找 URL 的问题,我建议您阅读 Jan Goyvaert 的优秀博客文章 Detecting URLs in a block of text .您需要自己决定要制作正则表达式的敏感程度和具体程度。

例如,帖子末尾提出的解决方案将转换为 Java 为

String resultString = subjectString.replaceAll(
"(?imx)\\b(?:(?:https?|ftp|file)://|www\\.|ftp\\.)\n" +
"(?:\\([-A-Z0-9+&@\\#/%=~_|$?!:,.]*\\)|\n" +
" [-A-Z0-9+&@\\#/%=~_|$?!:,.])*\n" +
"(?:\\([-A-Z0-9+&@\\#/%=~_|$?!:,.]*\\)|\n" +
" [A-Z0-9+&@\\#/%=~_|$])", "<a href=\"$0\">$0</a>");

关于java - 正则表达式仅匹配 URL 的一部分 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398492/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com