你能用正则表达式帮助我吗?
我有行
"Sites www.google.com и www.ridd.rdd..com good."
解析后,我得到这种类型的行:
"Sites http://www.google.com и www.ridd.rdd..com good."
检查连续点的问题。 对于有错误的网站(连续两个点)"http//:"
不应附加。
我的正则表达式:
Matcher matchr = Pattern.compile("w{3}(\\.\\w+)+[a-z]{2,6}").matcher(text);
while (matchr.find()) {
text = text.replace(matchr.group(0), "http://" + matchr.group(0));
}
System.out.println(text);
答案 0 :(得分:1)
你的正则表达式w{3}(\\.\\w+)+[a-z]{2,6}
匹配 的第二个错误" URL", www.ridd.rdd .. com。因此,您需要确保匹配的子字符串没有连续的点。您可以使用单词边界和否定前瞻(?!\S*\.{2})
。
使用
String text = "Sites www.google.com и www.ridd.rdd..com good.";
text = text.replaceAll("\\b(?!\\S*\\.{2})w{3}(\\.\\w+)+[a-z]{2,6}\\b", "http://$0");
// => Sites http://www.google.com и www.ridd.rdd..com good.
请参阅IDEONE demo
模式说明:
\\b
- 领先的字边界(?!\\S*\\.{2})
- 非白色空间块中不应有任何连续的点跟随w{3}
- 匹配www
(\\.\\w+)+
- 1个.
序列,后跟1个字母数字或下划线字符[a-z]{2,6}
- 确保有2到6个a-z
个字母...... \\b
- 在此" word"