当前位置: 主页 > JAVA语言

模式串匹配 java-表达式匹配规则的回复

发布时间:2023-07-15 07:01   浏览次数:次   作者:佚名

论坛的回复表情部分需要java处理回复的内容,将诸如[01.gif]替换

串匹配算法综述_串匹配问题_模式串匹配 java

。这里有一个难点就是在使用正则表达式进行匹配然后替换的时候,因为需要替换的内容是动态的,必须根据匹配的的内容动态生成。所以就不能使用正则表达式的直接替换,必须使用折中的方法实现。

首先是先要实现正则表达式匹配出字符串里全部符合[xxx]的字串。下面就是达到该目的的正则的规则字串

String regex="//[[^//s&&[^//[]]+//]";

模式串匹配 java_串匹配算法综述_串匹配问题

第一次用正则,刚开始费了好大的劲,网上的资料和jdk的介绍也都不太好。稍微解释一下吧。

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

然后是第二个需求,因为需要替换的字符是动态的,不可能一下子一起替换。所以只能使用迭代的方式模式串匹配 java,先将一个字串将第一个匹配替换,然后继续迭代替换,直到没有匹配为止模式串匹配 java,返回得到的字符串。

Java代码

串匹配算法综述_模式串匹配 java_串匹配问题

public String getHref(String src){

return "

";

模式串匹配 java_串匹配算法综述_串匹配问题

}

public String replace(String str){

String regex="//[[^//s&&[^//[]]+//]";

Pattern pattern=Pattern.compile(regex);

串匹配算法综述_串匹配问题_模式串匹配 java

Matcher matcher=pattern.matcher(str);

if(matcher.find()){

str=matcher.replaceFirst(getHref(matcher.group()));

return replace(str);

串匹配算法综述_串匹配问题_模式串匹配 java

}

else {

return str;

}

}