正则表达式 - 检测特定URL并替换该字符串

时间:2016-06-20 08:23:13

标签: java android regex linkify

我想在字符串中检测到确切的域url,然后用另一个字符串更改它,最后在TextView中点击它。

我想要的是什么:

this is sample text with one type of url mydomain.com/pin/123456. another type of url is mydomain.com/username.

Wel,我写了这个正则表达式:

([Hh][tT][tT][pP][sS]?://)?(?:www\\.)?example\\.com/?.*

([Hh][tT][tT][pP][sS]?://)?(?:www\\.)?example\\.com/pin/?.*

这个正则表达式可以检测到:

http://www.example.com
https://www.example.com
www.example.com
example.com
Hhtp://www.example.com // and all other wrong type in http

.com

之后的任何内容

的问题:

1。如何检测域的结尾(带空格或点)

2。如何检测两种类型的域,一种是/pin/而另一种没有?

3. 如何将检测到的域名mydomain.com/pin/123替换为PostLink,将mydomain.com/username替换为ProfileLink

4. 我知道如何使用Linkify点击它们,但是如果可能的话,可以告诉我提供内容提供商的最佳方式,以便通过适当的活动打开每个链接的链接

2 个答案:

答案 0 :(得分:1)

你可以尝试:

([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?

这是我在stackoverflow上快速搜索后找到的正则表达式:
Regular expression to find URLs within a string

我刚删除了该正则表达式的http://部分以满足您的需求。

请注意,因为它现在跟踪与点连接的所有内容,而不是空白。例如:还会找到a.a

答案 1 :(得分:1)

特别感谢Gildraths

回答问题1

List_output=[['A1','B1',[['D1',['ka',[['-1','Kc'],['1','KD']]]],['1','Kc','Ka'],['-1','D2','Kc','Ka']]],['B1,D1'[[ 'C1',[-1,'Kc','Ka','kF']],['F1',['1','Kz','Kl','Kc']]] ]]

回答问题2,3

String urlRegex = "(https?://)?(?:www\\.)?exampl.com+([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?";
Pattern pattern = Pattern.compile(urlRegex, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(textString);

回答问题4

while(matcher.find()){

    // Answer to question 2 - If was true, url contain "/pin"
    boolean contain = matcher.group().indexOf("/pin/") >= 0;

    if(contain){

        String profileId = matcher.group().substring(matcher.group().indexOf("/pin/") + 5, matcher.group().length());

    }

    // Answer to question 3 - replace match group with custom text
    textString = textString.replace(matcher.group(), "@" + profileId);
}