论坛的回复表情部分需要java处理回复的内容,将诸如[01.gif]替换成<img src='reply/01.gif'>。这里有一个难点就是在使用正则表达式进行匹配然后替换的时候,因为需要替换的内容是动态的,必须根据匹配的的内容动态生成。所以就不能使用正则表达式的直接替换,必须使用折中的方法实现。
首先是先要实现正则表达式匹配出字符串里全部符合[xxx]的字串。下面就是达到该目的的正则的规则字串
- String regex="\\[[^\\s&&[^\\[]]+\\]";
第一次用正则,刚开始费了好大的劲,网上的资料和jdk的介绍也都不太好。稍微解释一下吧。
第一次用正则,刚开始费了好大的劲,网上的资料和jdk的介绍也都不太好。稍微解释一下吧。 首先'['和']'在正则表达式里又特殊意义,所以在匹配这两个字符的时候需要使用\\进行转义。因为要求[]里面有任意数量的字符,[^\\s]在正则表达式里代表任意非空的字符,[^\\s]+里的+代表前面的一个字符有1~n个。所以\\[[^\\s]+\\]就代表[xxx],但是因为还有一个嵌套的问题,例如[a.gif][b.gif],正则引擎则会将前面的字串整体作为一个匹配,所以需要将[]中再含有[的匹配去掉。&&[^\\[]就是并且没有[的意思。至此,上述匹配规则就可以正确的匹配我的需求了。
然后是第二个需求,因为需要替换的字符是动态的,不可能一下子一起替换。所以只能使用迭代的方式,先将一个字串将第一个匹配替换,然后继续迭代替换,直到没有匹配为止,返回得到的字符串。
- public String getHref(String src){
- return "<img src='image/reply/"+ src.substring(1, src.length()-1) +"'/>";
- }
-
- public String replace(String str){
- String regex="\\[[^\\s&&[^\\[]]+\\]";
- Pattern pattern=Pattern.compile(regex);
- Matcher matcher=pattern.matcher(str);
- if(matcher.find()){
- str=matcher.replaceFirst(getHref(matcher.group()));
- return replace(str);
- }
- else {
- return str;
- }
- }
分享到:
相关推荐
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
正则表达式是一种可以用于模式匹配和替换的强有力的工具,一个正则表达式就是由普通的字符(例 如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式,它描述在查找文字主体时待匹配的一个或 多个字符串。正则...
基于单模式串和 Trie 树实现的敏感词过滤我们前面几节讲了好几种字符串匹配算法,有 BF 算法、RK 算法、BM 算法、KMP 算法,前面四种算法都是单模式串
上篇文章给大家介绍了Java正则表达式匹配,替换,查找,切割的方法,接下来,通过本篇文章给大家介绍js 正则匹配、查找与替换,具体内容请看下文。 js 正则匹配、查找与替换 RegExp对象RegExp对象表示正则表达式,它...
大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。...
正则表达式是一种可以用于模式匹配和替换的强有力的工具。 2、正则表达式的优点? 更少的代码,更高的效率。 3、正则表达式如何使用? 在下面的教程中我们将学习到正则表达式的用法。 4、正则表达式的缺点? 需要花...
Java正则表达入门教程1~6大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的...
提出采用模式匹配中的基于字符串匹配的相似度算法,通过添加、删除、替换等操作还原文档,并计算文档间的相似距离,根据相似距离获得文档相似度,从而判断文档的抄袭比例。反抄袭算法的研究实现为遏制进一步恶化的抄袭...
用于模式匹配的String方法: ...它对调用该方法的字符串检索,按照模式匹配子串替换成第二个参数,若包含修饰符g则全文匹配。若第一个参数不是正则表达式而是字符串,则直接搜索替换掉这个字符串; text.replace(/java
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。
大家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的一个或多个字符串。...
简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的基于UNIX/LINUX系统的软件工具中找到正则表达式的痕迹,例如:Perl或PHP脚本语言。此外,JavaScript这种客户端的脚本语言也提供了对正则...
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。 例如: runoo+b,可以匹配 runoob、...
正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限制,可肯定的是,它应用非常之广泛。 正则表达式的引擎已被许多普通的Unix工具所实现...
正则表达式是一种可以用于模式匹配和替换的强有力的工具。 2、正则表达式的优点? 更少的代码,更高的效率。 3、正则表达式如何使用? 在下面的教程中我们将学习到正则表达式的用法。 4、正则表达式的缺点? 需要花...
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单。如果你不熟悉这个术语,那么“正则表达式”(Regular Expression)就是一个字符构成的串,它定义了一...
Mensa是模式匹配状态机的通用,灵活,增强和高效的Java实现,如1975年Alfred V. Aho和Margaret J. Corasick所描述的那样:有效的字符串匹配:书目搜索的辅助工具[^ 1]实现是 通用性在于它可以用来匹配Java模板类型S...
7.5.6 重载中的最难点——参数匹配原则 171 7.6 使用类的实例作为方法参数 172 7.6.1 超车方法:使用类实例做参数 172 7.6.2 调用这个方法 173 7.6.3 发生了什么 174 7.7 加餐:局部变量和实例变量 175 7.7.1 ...
该项目是在 java 中,并使用正则表达式模式匹配来搜索和替换所需字符串的所有出现,并将其替换为指定的字符串。 创建初始实用程序是为了更改 JSFF 文件列表的属性。 该项目的未来视角是从用户那里获取基于字典的...