正则表达式用来处理字符串非常方便
java中正则表达式的语法:
字符类
[abc] 匹配a,b,c中任意1个,都为true
[^abc] 匹配除了a,b,c之外的任意字符,都为true
[a-zA-z] 匹配a到z和A到Z,都为true
预定义字符/特殊含义的字符
. 任意字符
\d 数字:0-9
\D 非数字:[^0-9]
\s 空白字符:空格,制表符
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
数量词
? 0次或1次
* 0次或n次
+ 1次或n次
{m} m次
{m,} 至少m次
{m,n} 至少m次,至多n次
package com.gc.pattern; import java.util.Set; import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { //mathch(); //split(); //replaceAll(); //getString(); //test01(); //test02(); //test03(); test04(); } /** * 匹配字符串---String.matches(String regex); * 规则: * 第1位只能以字母开头 * 只能包含字母,数字,下划线 * 长度最少3位,最多8位 */ public static boolean mathch() { String source = "a01"; String regex = "[a-zA-Z]\\w{2,7}";//字符串中,需要对\w进行转义,所以\\w boolean b = source.matches(regex);//检查字符串是否符合制定的规则 System.out.println(source+":"+b); return b; } /** * 切割字符串---String.split(String regex) * 组:用来对规则进行重复使用 * ()表示一个组,([^l])定义该组中的规则为非l的字符 * * 组的编号从1开始,最外层的括号表示第1个组,依次类推 * 引用某个编号的组: \n * \1表示引用正则表达式中第1个组,在字符串中使用需要进行转义,所以为:\\1 * 再使用次数对其进行修饰,即\\1+,表示对第1个组中的规则使用至少1次进行匹配 * * 所以,([^l])\\1+表示的意思: * 定义一个组,该组中的规则为非'l'的字符,然后使用\\1来引用这个组,使用+修饰其匹配时使用的次数 * */ public static void split() { //按叠词进行切割 String source = "helloworldppppphelloworld000helloworld"; String regex = "([^l])\\1+"; String[] arr = source.split(regex); for(String str : arr) { System.out.println(str); } //.在正则中表示任意字符,如果要使用其原始的含义,需要进行转义 String s2 = "abc.def.hif"; String[] arr2 = s2.split("\\."); for(String s : arr2) { System.out.println(s); } } /** * 替换字符串---String.replaceAll(String regex) * * $:用来对组进行引用 * (.)abc(\d) 则 $1表示第1组--->(.), $2表示第2组--->(\d) */ public static void replaceAll() { String source = "helloworldppppphelloworld000helloworld"; //匹配叠词 String regex = "(.)\\1+"; String newStr = source.replaceAll(regex, "@"); System.out.println(newStr);//he@oworld@he@oworld@he@oworld //$符号用来引用组,$1表示引用第1个组中规则所匹配到的字符 String newStr2 = source.replaceAll(regex, "$1"); System.out.println(newStr2);//heloworldpheloworld0heloworld String source3 = "13588889912"; String regex3 = "(\\d{3})\\d{4}(\\d{4})"; String newStr3 = source3.replaceAll(regex3, "$1****$2");//$1引用第1组--->(\\d{3}), $2引用第2组--->(\\d{4}),剩下的用****进行替换 System.out.println(newStr3);//135****9912 } /** * 获取字符串---Pattern * 要想通过正则表达式获取字符串,只能使用Pattern来完成 */ public static void getString() { String source = "Regex is very strong very good!"; String regex = "\\b[a-z]{2,4}\\b"; Pattern patter = Pattern.compile(regex);//将正则表达式编译为对象 Matcher matcher = patter.matcher(source);//将需要处理的字符串传入,通过pattern对象得到一个匹配器 while (matcher.find()) {//按正则表达式进行匹配 String str = matcher.group();//获取匹配到的字符串,可以通过指定组的序号来获取某个组匹配到的结果 System.out.println(str); } } /** * \\. 替换字符串中的. * (.)\\1+ 叠词 */ public static void test01() { String str = "a..aabb..bcc..c"; str = str.replaceAll("\\.", ""); System.out.println(str);//aaabbbccc str = str.replaceAll("(.)\\1+", "$1"); System.out.println(str);//abc } /** * replaceAll使用正则,使用组完成操作 */ public static void test02() { String str = "192.1.1.0 192.168.2.4 10.0.60.121 1.2.3.4"; //连续数字前面补2个0 String strNew = str.replaceAll("(\\d+)", "00$1"); //保留3位 strNew = strNew.replaceAll("0*(\\d{3})", "$1"); //按空格分组 String[] arr = strNew.split("\\s+"); //使用TreeSet对字符串排序 Set<String> set = new TreeSet<String>(); for(String s : arr) { set.add(s); } for(String s : set) { //替换掉前面的0 s = s.replaceAll("0*(\\d+)", "$1"); System.out.println(s); } } /** * 邮箱校验 * (\\w+\\.*)+ 字母数字下划线,可包含.,可出现多次 * @ 邮箱地址必须包含的字符 * [0-9a-zA-Z]+ 服务器 * (\\.[a-zA-Z]+){1,3} 域名 */ public static void test03() { String email = "abc.def@163.com.cn"; String regex = "(\\w+\\.*)+@[0-9a-zA-Z]+(\\.[a-zA-Z]+){1,3}"; System.out.println(email.matches(regex)); } public static void test04() { Pattern p = Pattern.compile("href='(.*?)'>(.*?)</a>"); Matcher m = p.matcher(html); while(m.find()){ String link = m.group(1); String label = m.group(2); System.out.println(link+"--->"+label); } } static String html = null; static { html = "<span><a href='http://buy.2345.com/'>购物</a><a href='caipiao.htm'>彩票" + "</a><a href='http://tianqi.2345.com/'>天气" + "</a><a href='http://tools.2345.com/'>查询</a>" + "<a href='http://tuan.2345.com/'>团购</a>" + "<a href='gupiao.htm'>股票</a><a href='jijin.htm'>基金</a>" + "<a href='bank.htm'>银行</a><a href='car.htm'>汽车</a>" + "<a href='http://www.2345.com/ershouche.htm' class='words3'>二手车</a>" + "<a href='house.htm'>房产</a><a href='map.htm'>地图</a>" + "<a href='health.htm'>健康</a><a href='meishi.htm'>美食</a>" + "<a href='manwoman.htm'>女性</a><a href='http://lvyou.2345.com/'>旅游</a>" + "<a href='newsweek.htm'>新闻</a><a href='shouji.htm'>手机</a>" + "<a href='child.htm'>儿童</a><a href='fashion.htm'>时尚</a>" + "<a href='daxue.htm'>大学</a><a href='job.htm'>招聘</a>" + "<a href='http://buy.2345.com/activity.html'>折扣</a>" + "<a href='flower.htm'>宠物</a>" + "<a href='http://lux.2345.com/' class='words3 fred'>奢侈品</a></span>" + "<h3><a href='ylwz.htm'>娱乐网站</a></h3>" + "<span><a href='music.htm'>音乐</a><a href='http://game.2345.com/' name='2'>游戏</a>" + "<a href='http://tv.2345.com/shipin/'>视频</a><a href='http://dianying.2345.com/'>电影</a>" + "<a href='junshi.htm'>军事</a><a href='mm.htm'>图片</a><a href='zt/girl.htm'>美女</a>" + "<a href='http://tv.2345.com/' class='words3'>电视剧</a>" + "<a href='http://book.2345.com/' class='fred'>小说</a><a href='sport.htm'>体育</a>" + "<a href='nba.htm'>NBA</a><a href='http://www.2345.com/football.htm'>足球</a>" + "<a href='love.htm'>交友</a><a href='bbs.htm'>论坛</a><a href='xingzuo.htm'>星座</a>" + "<a href='joke.htm'>笑话</a><a href='http://tv.2345.com/dongman/' name='2'>动漫</a>" + "<a href='http://tv.2345.com/zongyi/'>综艺</a><a href='http://tv.2345.com/live/' name='2'>直播</a>" + "<a href='http://tv.2345.com/dv/' class='words3'>微视频</a><a href='yule.htm'>明星</a><a href='http://wan.2345.com/' class='fred'>页游</a><a href='http://wangyou.2345.com/'>网游</a>" + "<a href='http://xiaoyouxi.2345.com/' class='words3'>小游戏</a></span>" + "<h3><a href='qtwz.htm'>其他网站</a></h3>" + "<span><a href='software.htm'>软件</a><a href='hardware.htm'>电脑</a>" + "<a href='kv.htm'>杀毒</a><a href='mail.htm'>邮箱</a><a href='blog.htm'>博客</a><a href='weibo.htm'>微博</a><a href='chat.htm'>聊天</a><a href='pic.htm'>壁纸</a>" + "<a href='sheying.htm'>摄影</a><a href='art.htm'>琴棋</a><a href='quyi.htm'>曲艺</a><a href='laonian.htm'>老年</a><a href='sheji.htm'>设计</a><a href='eng.htm'>外语</a>" + "<a href='kaoshi.htm'>考试</a><a href='edu.htm'>教学</a><a href='law.htm'>法律</a><a href='gov.htm'>政府</a><a href='corp.htm'>行业</a><a href='aihao.htm'>爱好</a>" + "<a href='world.htm'>国外</a><a href='tongxun.htm'>移动</a><a href='shuma.htm'>数码</a><a href='homepage.htm'>建站</a><a href='baoxian.htm'>保险</a>" + "<a href='navhtm/city.htm'>地方网站</a></span>jjj@kkk.com.cn"; } }
相关推荐
Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了 Java 中的基本类库,使用时不需要再导入第三方的类库了。Java 正则表达式的语法来源于象征着正则表达式标准的 Perl 语言,但也不是完全相同...
Java正则表达式学习笔记,比较基础,适合初学者
java常用基础正则表达式参考文档,java常用基础正则表达式参考文档
全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍...
正则表达式,又称规则...当然在Java中也可以通过处理字符串的方式达到检索,替换文本字符串的目的,但是有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的,当然这也是建立在熟悉正则表达式的基础之上的。
Java 正则表达式基础,Java 正则表达式基础,Java 正则表达式基础,Java 正则表达式基础,Java 正则表达式基础
Java语法基础+一些 JAVA案例,和正则表达式
精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...
1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的...
Java正则表达式详解 正则表达式基础知识 Jakarta-ORO库 应用实例
Java正则表达式详解.doc 正则表达式的基础讲解。
正则表达式用法以及案例全篇 内含正则表达式所有基础符号和用法 含java操作代码案例 含实际案例及java详解
Java正则表达式详细演示文稿,正则表达式是所有编程的基础,java里的具体应用及编写模式如何呢,请具体看文档。
Groovy 正则表达式 Groovy正则表达式语法 背景项目使用Gradle作为自动化构建的工具, 闲暇之余对这个工具的使用方式以及其配置文件依赖的Groov
java正则表达式使用说明和正则表达式基础知识
想学正则表达式的,必看,看完必会,包看包会,从基础到高级应用。
正则表达式应用非常广泛,例如:php,Python,java等,但在linux中最常用的正则表达式的命令就是grep(egrep),sed,awk等,换句话 说linux三剑客要想能工作的更高效,就一定离不开正则表达式的配合。 1、什么是正则...
公司最近需要大量用到正则表达式,所以在原有的基础上,自己改版了那个表达式文档,希望可以帮到大家。
本文介绍如何使用 java.util.regex API 作为正则表达式模式匹配。虽然说这个包中可被接受的语法参数与 Perl 是相似的,但我们并不需要掌握 Perl 的语法知识。本教程将从基础开始,逐层深入到更多的高级技巧。
java正则表达式理解,对于java 的正则验证规则和三个基础类使用。