日期:2014-05-20  浏览次数:20787 次

挑战Pattern
start:
Pattern   p   =   Pattern.compile
( "(\\[(URL)((=(((http://)|(ftp://))?)([^\\[]*))?)\\])((((http://)|(ftp://))?)([^\\[]*))(\\[(\\/URL)\\]) ",Pattern.CASE_INSENSITIVE);
               
                Matcher   m   =   p.matcher(s);
                StringBuffer   sb   =   new   StringBuffer();
                boolean   result   =   m.find();
                while(result)   {
          m.appendReplacement(sb, " <a   href=\ " ");
                        if(! " ".equals(m.group(3))){
              if( " ".equals(m.group(5)))
    if(m.group(10)==null)
sb.append( "http:// "+m.group(9)+ "\ "> "+m.group(9)+ " </a> ");
                      else
sb.append( "http:// "+m.group(9)+ "\ "> "+m.group(10)+ " </a> ");
              else
    if(m.group(10)==null)
sb.append(m.group(5)+m.group(9)+ "\ "> "+m.group(5)+m.group(9)+ " </a> ");
    else
sb.append(m.group(5)+m.group(9)+ "\ "> "+m.group(10)+ " </a> ");
}
  else{
            if( " ".equals(m.group(11)))
sb.append( "http:// "+m.group(10)+ "\ "> "+m.group(10)+ " </a> ");
            else
sb.append(m.group(10)+ "\ "> "+m.group(10)+ " </a> ");
}
                  result   =   m.find();
        }
                m.appendTail(sb);
end
那位高手能给解释一下

------解决方案--------------------
应该是比较复杂的URL地址提取.
建议去看一下正则表达式(其实, 也可以直接看
java.util.regex.Matcher
java.util.regex.Pattern