这种模式的正则表达式:@或#+ 1或2个单词+:+ 1个单词或更多+链接不起作用

时间:2015-09-10 02:33:49

标签: regex

我有这样的模式:

@ or # + 1 or 2 words + : + 1 words or more + link

因为你可以看到我有一个以@或#开头的句子,并以链接结束 喜欢:

@justin Trudue:I do not [go there][1] 

我编写了以下代码来检查具有此模式的任何句子:

private static void patternFinder(String commentstr){
     String urlPattern = "#|@({1}|{2}):\\w+(https://\\w+|http://\\w+)";
     Pattern p = Pattern.compile(urlPattern,Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(commentstr);
        if (m.find()) {
            System.out.println("yes");
        }

}

但这对于这句话不起作用,应写成是但没有任何反应:

@hello sss:xxx

我的regx有什么问题吗?

1 个答案:

答案 0 :(得分:3)

试一试

[@|#]((?:\w+\s?){1,2}):\s?((?:\w+\s?){1,})((?:http|https):\/\/.+)

测试

@hello sss: xxx https://t.co/3WHshzDG7m
#hello sss: xxx another word https://t.co/3WHshzDG7m
#hello sss third: xxx another word https://t.co/3WHshzDG7m

结果

  1. MATCH 1

    1. [1-10] hello sss
    2. [12-16] xxx
    3. [16-39] https://t.co/3WHshzDG7m
  2. MATCH 2

    1. [41-50] hello sss
    2. [52-69] xxx another word
    3. [69-92] https://t.co/3WHshzDG7m
  3. 在线演示https://regex101.com/r/zU7lP2/1

    如果您不想修复链接协议,则为另一个版本

    [@|#]((?:\w+\s?){1,2}):\s?((?:\w+\s?){1,})((?<=\s)\w+:\/\/.+)
    

    在线演示https://regex101.com/r/zU7lP2/2