正则表达式用来处理字符串非常方便
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正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...
2. **正则表达式中的特殊字符** 特殊字符是具有特定含义的字符,例如`\`用于转义,使得原本具有特殊意义的字符如`(`、`)`、`.`等变成普通字符。其他特殊字符如`\d`代表数字,`\s`代表空白字符,`\w`代表单词字符...
句点符号(`.`)是正则表达式中最基础的元素之一,它代表任意单个字符。例如,`t.n`可以匹配所有以`t`开头、以`n`结尾且中间只有一个字符的字符串,如`tan`、`ten`、`tin`等。需要注意的是,句点符号匹配范围广泛,...
Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...
Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配、数据验证和文本检索替换。在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在...
本篇将深入探讨Java中的字符串、正则表达式及其在实际编程中的详细实例代码。 1. **字符串基础** - Java中的字符串是不可变的,这意味着一旦创建了字符串对象,就不能更改其内容。这由`final`关键字确保,提高了...
正则表达式中的括号可以用来定义捕获组,`Matcher`提供`group(int group)`方法来获取捕获组的值。 6. **迭代匹配:** 对于多个匹配结果,可以使用`Matcher.find()`的循环来遍历所有匹配的子串。 在实际应用中,...
### Java正则表达式判断字符串是否包含中文 在日常的软件开发过程中,我们经常会遇到需要对输入的字符串进行校验的情况。例如,在处理用户输入、文本分析或数据清洗时,可能需要判断一个字符串中是否包含中文字符。...
5. **教程和帮助文档**:通常,软件会附带详细的使用说明或教程,帮助用户学习和理解正则表达式的基础知识和高级技巧。 压缩包内的`regexBuilderSetup_std.exe`是安装程序,用户可以通过运行这个文件来安装正则...
、\*、\+等在正则表达式中具有特殊含义,若要匹配它们本身,需要使用反斜杠进行转义。例如,`.`匹配任意单个字符,`\.`则匹配实际的点字符。 3. **边界匹配器**:^匹配字符串的开始,$匹配字符串的结束,\b用于匹配...
例如,以下代码展示了如何使用Java正则表达式检查字符串是否符合社会安全号码的格式: ```java import java.util.regex.*; public class Main { public static void main(String[] args) { String ssn = "123-12...
以上给出的正则表达式仅覆盖了一些基础用例,实际的正则表达式可以变得极其复杂,涉及更多的元字符和修饰符,如贪婪与非贪婪匹配、分组、零宽断言等。正则表达式的学习和掌握需要时间和实践,但一旦熟悉,它们将成为...
### Java正则表达式匹配全角空格 在Java编程中,处理字符串是非常常见的需求之一。其中,使用正则表达式来对字符串进行拆分、替换等操作是一种非常高效的方法。本文将详细介绍如何使用Java中的`split()`方法,并...
以上就是Java正则表达式的详细讲解,从基础概念到高级用法,涵盖了正则表达式在Java中的各种操作。通过熟练掌握这些知识,可以大大提高你在处理字符串时的效率和灵活性。在实际项目中,结合`MLDN魔乐JAVA_59正则...
Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。本教程将深入讲解Java中的正则表达式,并提供丰富的实例来帮助开发者理解和应用这些概念。 1. 正则...
#### 二、Java正则表达式基础 在Java中,`java.util.regex`包提供了用于处理正则表达式的类库,主要包括`Pattern`、`Matcher`等类。 - **Pattern**: 表示编译后的正则表达式模式。 - **Matcher**: 用于执行正则...
#### 二、Java正则表达式基础 Java的正则表达式主要由`java.util.regex`包中的三个关键类构成:`Pattern`、`Matcher`和`PatternSyntaxException`异常类。 1. **Pattern类**:该类用于编译正则表达式字符串,并创建...