public static void main(String[] args) {
        //String reg="@^(\\.|\\,|:|;|!|\\?|\\s|#|@|。|,|:|;|!|?)*";
        String reg="@[^\\.^\\,^:^;^!^\\?^\\s^#^@^。^,^:^;^!^?]+"; //以@开头以.,:等结束的字符串
        Pattern pattern=Pattern.compile(reg);
        System.out.println(pattern.toString());
        Matcher matcher=pattern.matcher("fsafaf加大@梵净山,金佛山@就佛网 杰弗里斯");
        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);
    }以上是我写的 要求像新浪微博一样只要输入的字符串中有@XXX就给加上链接 自己写了一个正则表达式 找出一个字符串中以@开头以句号或逗号或分号或空格等就给加上链接。感觉这个比较啰嗦有没有更简练点的写法,请指教。

解决方案 »

  1.   

     String reg="@.*?(?=[.,:;!?\\s#@。,:;!?])";
      

  2.   

    谢谢!能不能解释一下String reg="@^[\\.\\,:;!\\?\\s#@。,:;!?]+"; 为什么不可以呢。
      

  3.   

    1.放在[]中的字符不用再转义
    2.^放在中括号外面的意思是以什么什么开头,不是代表非
    写成这样也可以String reg="@[^.,:;!?\\s#@。,:;!?]+";
      

  4.   

    你忘了加“)”或者“(”结尾的了
    这样就ok了:@[^\\.^\\,^:^;^!^(^)^\\?^\\s^#^@^。^,^:^;^!^?^(^)]+