转自:http://blog.csdn.net/csdn_yaobo/article/details/48377757
原本是要收藏的,可是不知怎么了,点了收藏没有反应,只好先转载一下,等能收藏的时候,会删除此文章web
学习了正则表达式后,感受正则表达式很强大,可是为了更好地理解正则表达式,找了一个很实际的问题来分享一下本身学习的心得。本题目是招聘时的一个题目,题目大体的意思是这样的:用户每次在网上消费东西,以后会给商家评论,可是这个评论中会有许多人评论一下小广告,为了能找出这些评论,咱们假设这样一个场景:正则表达式
常常的一些小广告会有下面一下词语:”网店地址“,“销售”,“代购”; 假如一个用户的评论是这样:这家酒店性价比高,提供海外代%……&购*&&6服……&**务”,网店地址:¥……**&*6“; 要求:匹配出关键字,并打印出关键字和该条评论。 就如上面这个题,我想已经表达的够清楚了,咱们该怎么下手呢?咱们常常的想法是一个一个扫描匹配,可是这样是否是太麻烦,并且有的评论中会有不少特殊字符,那咱们怎么办呢?个人思路是这样,咱们匹配的都是关键字,也就是汉字,那么能够将上述评论中全部的特殊符号(包括字母,空格,数字等)所有删除掉,只剩下汉字,而后咱们去匹配关键字,这样就简单了,下来用一段程序说一下怎样去除特殊符号: String string1 = "我爱编w!@#程 www#
她不5454 dadad &*$()###(爱编dadada程w!”;编程
String regEx="[`~!@#$%^&*()+=|{}:;\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?a-zA-Z0-9 ]"; Pattern c = Pattern.compile(regEx); Matcher mc=c.matcher(string1); String result = mc.replaceAll("").trim(); System.out.println(result);
解释一下上面的程序:我给了这样一句话“我爱编w!@#程 www#学习
她不5454 dadad &*$()###(爱编dadada程w!”,而后从这句话中找出匹配“编程”关键字;而后并输出,上面regEx是正则表达式,目的是过滤掉全部特殊字符,可能我写的这个有漏掉的字符,能够根据本身的须要修改,这样咱们就将这句话通过过滤变成了下面这样:spa
上面已经去除掉特殊符号了,下来是最关键的是怎样匹配关键字呢?又用一个简单的程序示例说一下:.net
Pattern p = Pattern.compile("[编][程]"); Matcher m = p.matcher(result); while(m.find()){ System.out.println(m.group()); }
上面那个“(“[编][程]”)”就是匹配关键字,不能写成“[编程]”,若是写成“[编程]”就会出现每一个字和上面那句话匹配,而不是一个词语匹配,和咱们想要的结果大相径庭,这个能够参考正则表达式的概念(写到一个里至关雨或的概念,写到两个里就是两个条件是且的意思如:[0-9,a-z]与[0-9][a-z])。若是有匹配的,输出匹配的关键字。下面是输出的结果,这句话中出现了两次编程,咱们都匹配出来了,并且都输出来了。code