匹配新浪微博中的@

snailxr 2011-09-13 11:06:56
有没有什么好的方法将用户输入的一个字符串中以@开始的找出来,加上链接,但如果@以email的形式出现的就忽略,保留原来的形式。
第一个要求用正则表达式就可以实现但第二个好像有点困难啊....

public static void main(String[] args) {
String reg="@.*?(?=[.,:;!?\\s#@。,:;!?])";
Pattern pattern=Pattern.compile(reg);
System.out.println(pattern.toString());
Matcher matcher=pattern.matcher("fsafaf加大@梵净山,金佛山@就佛网 杰弗里斯abc@sina.com fsla");
StringBuffer sb=new StringBuffer();
while(matcher.find()){
System.out.println(matcher.group());
matcher.appendReplacement(sb, "<a href='abc'>"+matcher.group()+"</a>");
}
matcher.appendTail(sb);
System.out.println(sb);
}
...全文
230 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuwei003 2011-09-13
  • 打赏
  • 举报
回复
代码只是思想的体现,你自己要先弄清楚根据什么来区分哪个是带@的字符串,哪个是邮箱地址。
阳明 to life 2011-09-13
  • 打赏
  • 举报
回复
那你考虑过有用户叫类似sina.com的没 如果是这种情况那@前面只要有字符那你就得认定是邮件而不是@名字
snailxr 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shuwei003 的回复:]

代码只是思想的体现,你自己要先弄清楚根据什么来区分哪个是带@的字符串,哪个是邮箱地址。
[/Quote]
谢谢!!我能想到的是先用email的正则将所有的email用特殊标记替换掉,再用上面的方法给@的字符串加链接,再将原来的email放回去。
还是4楼的更有技术含量些。\(^o^)/
snailxr 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ouotuo 的回复:]

改造了一下,看符不符合。。。哈哈。。。。
Java code

public static void main(String[] args) {
String reg = "([a-zA-Z0-9-.]*)@(.*?)([,:;!?\\s#@。,:;!?]|$|\\.(?:com|org|net))";
Pattern pattern = Pattern.co……
[/Quote]
不错,谢谢!!!!
ouotuo 2011-09-13
  • 打赏
  • 举报
回复
改造了一下,看符不符合。。。哈哈。。。。

public static void main(String[] args) {
String reg = "([a-zA-Z0-9-.]*)@(.*?)([,:;!?\\s#@。,:;!?]|$|\\.(?:com|org|net))";
Pattern pattern = Pattern.compile(reg);
System.out.println(pattern.toString());
Matcher matcher = pattern
.matcher("fsafaf加大@梵净山,金佛山@就佛网 杰弗里斯abc@sina.com fsla;@sina.com;ssd@sina");
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String begin = matcher.group(1);
String middle = matcher.group(2);
String end = matcher.group(3);

// 判断email
if (!begin.equals("")) {
boolean isEmail = middle.length() != 0;
for (int i = 0; i < middle.length(); i++) {
if (!Character.isLetterOrDigit(middle.charAt(i))) {
isEmail = false;
break;
}
}
if (isEmail) {
if (end.length() > 1) {
//确认是email
continue;
}
}
}

matcher.appendReplacement(sb, begin + "<a href='abc'>" + "@"
+ middle + "</a>" + end);
}
matcher.appendTail(sb);
System.out.println(sb);

}
安心逍遥 2011-09-13
  • 打赏
  • 举报
回复
随便找个替换就行。呵呵。主要自己知道

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧