我有这样的模式:
@ 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有什么问题吗?
答案 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
结果
MATCH 1
hello sss
xxx
https://t.co/3WHshzDG7m
MATCH 2
hello sss
xxx another word
https://t.co/3WHshzDG7m
在线演示https://regex101.com/r/zU7lP2/1
如果您不想修复链接协议,则为另一个版本
[@|#]((?:\w+\s?){1,2}):\s?((?:\w+\s?){1,})((?<=\s)\w+:\/\/.+)