Android Regex文本网址转换为可点击链接

时间:2017-03-11 09:16:02

标签: android regex regex-negation

我是正则表达式字符串和操作的新手。但我正在尝试开发一个Android应用程序,需要将整个字符串中的文本URL(无标记)替换为

<a href='$link'>$link </a> 

我找到了工作代码 -

text_to_url= text_to_url.replaceAll("(<a[^>]+>)|(http(?s)://.*)", "<a href=\"$0\">$0</a>");

但正如我上面承认的那样,我对正则表达式的单词和函数很新。 即使我可以使用该代码获取标记内的url,但它不会停留在url的末尾(我认为根据*)。

问题是,如果有2个或更多连续的link_text_urls并排或逐行显示,则显示为一个链接(url是第一个出现的网址)。

我多次尝试并通过谷歌搜索找到这个结果。但是我的正则表达式知识无法帮助我找到它。

请让我知道答案。非常感谢您理解我的问题。

示例文字 -

<h3>Post Title</h3>
<p>This is a paragraph of text of the post</p>
<img src="http://imageurl">
<p>Please read more on this link</p><br/>
http://www.readmorelink.com/1212/1212post

2 个答案:

答案 0 :(得分:0)

看起来你正在使用的正则表达式是错误的。

试试这个:

text_to_url = text_to_url.replaceAll("(?i)\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))", "<a href=\"$0\">$0</a>");

这个正则表达式不是来自我,它实际上是来自john gruber并且在这里得到了很好的解释:http://daringfireball.net/2010/07/improved_regex_for_matching_urls

有各种编辑器,您可以尝试使用正则表达式,例如这一个:https://regex101.com/ - 他们非常方便了解发生了什么。

答案 1 :(得分:0)

我可以在你的正则表达式中看到一个小错误。 https?而不是http(?s)应该s可选。 (?s)表示内联修饰符,以使.匹配换行符 至于

  

但它不会在url结束时停止(我认为根据*)


是的,你是对的,因为*greedy by default。您可以在其后添加?使其变得懒惰 但更好的方法是使用这个

text_to_url= text_to_url.replaceAll("(?<!\")(https?://[^\s\n]*)(?!\")", "<a href=\"$0\">$0</a>");

其中[^\s\n]*将匹配任何字符零次或多次不是空格或换行符。