`
schy_hqh
  • 浏览: 555743 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(基础)java中的正则表达式

 
阅读更多

 

正则表达式用来处理字符串非常方便

 

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使用正则表达式提取XML节点内容的方法示例

    为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...

    JAVA正则表达式大全

    2. **正则表达式中的特殊字符** 特殊字符是具有特定含义的字符,例如`\`用于转义,使得原本具有特殊意义的字符如`(`、`)`、`.`等变成普通字符。其他特殊字符如`\d`代表数字,`\s`代表空白字符,`\w`代表单词字符...

    常用java正则表达式

    句点符号(`.`)是正则表达式中最基础的元素之一,它代表任意单个字符。例如,`t.n`可以匹配所有以`t`开头、以`n`结尾且中间只有一个字符的字符串,如`tan`、`ten`、`tin`等。需要注意的是,句点符号匹配范围广泛,...

    Java正则表达式.ppt

    Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...

    java 正则表达式应用jar包 regex-smart.jar

    Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配、数据验证和文本检索替换。在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在...

    java 字符串 正则表达式 详细实例代码

    本篇将深入探讨Java中的字符串、正则表达式及其在实际编程中的详细实例代码。 1. **字符串基础** - Java中的字符串是不可变的,这意味着一旦创建了字符串对象,就不能更改其内容。这由`final`关键字确保,提高了...

    Java 用正则表达式作文本处理

    正则表达式中的括号可以用来定义捕获组,`Matcher`提供`group(int group)`方法来获取捕获组的值。 6. **迭代匹配:** 对于多个匹配结果,可以使用`Matcher.find()`的循环来遍历所有匹配的子串。 在实际应用中,...

    Java 正则表达式判断字符串是否包含中文

    ### Java正则表达式判断字符串是否包含中文 在日常的软件开发过程中,我们经常会遇到需要对输入的字符串进行校验的情况。例如,在处理用户输入、文本分析或数据清洗时,可能需要判断一个字符串中是否包含中文字符。...

    正则表达式自动生成器 V2.0.0.1 官方多语版

    5. **教程和帮助文档**:通常,软件会附带详细的使用说明或教程,帮助用户学习和理解正则表达式的基础知识和高级技巧。 压缩包内的`regexBuilderSetup_std.exe`是安装程序,用户可以通过运行这个文件来安装正则...

    适合于js和java的正则表达式

    、\*、\+等在正则表达式中具有特殊含义,若要匹配它们本身,需要使用反斜杠进行转义。例如,`.`匹配任意单个字符,`\.`则匹配实际的点字符。 3. **边界匹配器**:^匹配字符串的开始,$匹配字符串的结束,\b用于匹配...

    java正则表达式 regx

    例如,以下代码展示了如何使用Java正则表达式检查字符串是否符合社会安全号码的格式: ```java import java.util.regex.*; public class Main { public static void main(String[] args) { String ssn = "123-12...

    正则表达式大全.docx

    以上给出的正则表达式仅覆盖了一些基础用例,实际的正则表达式可以变得极其复杂,涉及更多的元字符和修饰符,如贪婪与非贪婪匹配、分组、零宽断言等。正则表达式的学习和掌握需要时间和实践,但一旦熟悉,它们将成为...

    java正则表达式匹配全角空格

    ### Java正则表达式匹配全角空格 在Java编程中,处理字符串是非常常见的需求之一。其中,使用正则表达式来对字符串进行拆分、替换等操作是一种非常高效的方法。本文将详细介绍如何使用Java中的`split()`方法,并...

    Java正则表达式详细讲解

    以上就是Java正则表达式的详细讲解,从基础概念到高级用法,涵盖了正则表达式在Java中的各种操作。通过熟练掌握这些知识,可以大大提高你在处理字符串时的效率和灵活性。在实际项目中,结合`MLDN魔乐JAVA_59正则...

    java正则表达式实例教程

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。本教程将深入讲解Java中的正则表达式,并提供丰富的实例来帮助开发者理解和应用这些概念。 1. 正则...

    java中的正则表达式

    #### 二、Java正则表达式基础 在Java中,`java.util.regex`包提供了用于处理正则表达式的类库,主要包括`Pattern`、`Matcher`等类。 - **Pattern**: 表示编译后的正则表达式模式。 - **Matcher**: 用于执行正则...

    java正则表达式.pdf

    #### 二、Java正则表达式基础 Java的正则表达式主要由`java.util.regex`包中的三个关键类构成:`Pattern`、`Matcher`和`PatternSyntaxException`异常类。 1. **Pattern类**:该类用于编译正则表达式字符串,并创建...

Global site tag (gtag.js) - Google Analytics