java模式匹配及替换

论坛的回复表情部分需要java处理回复的内容,将诸如[01.gif]替换成<img src='reply/01.gif'>。这里有一个难点就是在使用正则表达式进行匹配然后替换的时候,因为需要替换的内容是动态的,必须根据匹配的的内容动态生成。所以就不能使用正则表达式的直接替换,必须使用折中的方法实现。

  
   首先是先要实现正则表达式匹配出字符串里全部符合[xxx]的字串。下面就是达到该目的的正则的规则字串
  1. String regex="\\[[^\\s&&[^\\[]]+\\]";
   第一次用正则,刚开始费了好大的劲,网上的资料和jdk的介绍也都不太好。稍微解释一下吧。
第一次用正则,刚开始费了好大的劲,网上的资料和jdk的介绍也都不太好。稍微解释一下吧。   首先'['和']'在正则表达式里又特殊意义,所以在匹配这两个字符的时候需要使用\\进行转义。因为要求[]里面有任意数量的字符,[^\\s]在正则表达式里代表任意非空的字符,[^\\s]+里的+代表前面的一个字符有1~n个。所以\\[[^\\s]+\\]就代表[xxx],但是因为还有一个嵌套的问题,例如[a.gif][b.gif],正则引擎则会将前面的字串整体作为一个匹配,所以需要将[]中再含有[的匹配去掉。&&[^\\[]就是并且没有[的意思。至此,上述匹配规则就可以正确的匹配我的需求了。

   然后是第二个需求,因为需要替换的字符是动态的,不可能一下子一起替换。所以只能使用迭代的方式,先将一个字串将第一个匹配替换,然后继续迭代替换,直到没有匹配为止,返回得到的字符串。
Java代码
  1. public String getHref(String src){   
  2.     return "<img src='image/reply/"+ src.substring(1, src.length()-1) +"'/>";   
  3. }   
  4.   
  5. public String replace(String str){   
  6.      String regex="\\[[^\\s&&[^\\[]]+\\]";   
  7.      Pattern pattern=Pattern.compile(regex);   
  8.      Matcher matcher=pattern.matcher(str);   
  9.     if(matcher.find()){   
  10.          str=matcher.replaceFirst(getHref(matcher.group()));   
  11.         return replace(str);   
  12.      }   
  13.     else {   
  14.         return str;   
  15.      }   
  16. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值