`
schy_hqh
  • 浏览: 542330 次
  • 性别: 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 正则表达式 教程

    Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了 Java 中的基本类库,使用时不需要再导入第三方的类库了。Java 正则表达式的语法来源于象征着正则表达式标准的 Perl 语言,但也不是完全相同...

    java正则表达式学习笔记

    Java正则表达式学习笔记,比较基础,适合初学者

    java常用基础正则表达式参考文档

    java常用基础正则表达式参考文档,java常用基础正则表达式参考文档

    正则表达式完整高清版

    全书分为三大部分:第一部分主要讲解正则表达式的基础知识,涵盖了常见正则表达式中的各种功能和结构;第二部分主要讲解关于正则表达式的更深入的知识,详细探讨了编码问题、匹配原理、解题思路;第三部分将之前介绍...

    java基础09-正则表达式.pptx

    正则表达式,又称规则...当然在Java中也可以通过处理字符串的方式达到检索,替换文本字符串的目的,但是有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的,当然这也是建立在熟悉正则表达式的基础之上的。

    Java 正则表达式基础

    Java 正则表达式基础,Java 正则表达式基础,Java 正则表达式基础,Java 正则表达式基础,Java 正则表达式基础

    Java语法基础+一些 JAVA案例,和正则表达式

    Java语法基础+一些 JAVA案例,和正则表达式

    精通正则表达式~~~

    精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...

    Java正则表达式入门介绍

    1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的...

    Java正则表达式详解

    Java正则表达式详解 正则表达式基础知识 Jakarta-ORO库 应用实例

    Java正则表达式详解.doc

    Java正则表达式详解.doc 正则表达式的基础讲解。

    正则表达式.docx

    正则表达式用法以及案例全篇 内含正则表达式所有基础符号和用法 含java操作代码案例 含实际案例及java详解

    Java正则表达式.ppt

    Java正则表达式详细演示文稿,正则表达式是所有编程的基础,java里的具体应用及编写模式如何呢,请具体看文档。

    groovy正则表达式基础1

    Groovy 正则表达式 Groovy正则表达式语法 背景项目使用Gradle作为自动化构建的工具, 闲暇之余对这个工具的使用方式以及其配置文件依赖的Groov

    java正则表达式使用说明

    java正则表达式使用说明和正则表达式基础知识

    正则表达式大全(超好)

    想学正则表达式的,必看,看完必会,包看包会,从基础到高级应用。

    详解linux正则表达式(基础正则表达式+扩展正则表达式)

    正则表达式应用非常广泛,例如:php,Python,java等,但在linux中最常用的正则表达式的命令就是grep(egrep),sed,awk等,换句话 说linux三剑客要想能工作的更高效,就一定离不开正则表达式的配合。 1、什么是正则...

    正则表达式用法大全

    公司最近需要大量用到正则表达式,所以在原有的基础上,自己改版了那个表达式文档,希望可以帮到大家。

    正则表达式教程.pdf

    本文介绍如何使用 java.util.regex API 作为正则表达式模式匹配。虽然说这个包中可被接受的语法参数与 Perl 是相似的,但我们并不需要掌握 Perl 的语法知识。本教程将从基础开始,逐层深入到更多的高级技巧。

    java正则表达式理解

    java正则表达式理解,对于java 的正则验证规则和三个基础类使用。

Global site tag (gtag.js) - Google Analytics