Java_正则表达式

Java 正则表达式的总结和一些小例子

(http://www.cnblogs.com/xuemaxiongfeng/p/3236591.html)

字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些 目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础工具,可以用于很多类型的文本处理, 如匹配,搜索,提取和分析结构化内容.

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包。它包括两个类:Pattern和Matcher.
Pattern是一个正则表达式经编译后的表现模式。 在java中,通过适当命名的Pattern类可以容易确定String是否匹配某种模式.模式可以象匹配某个特定的String那样简单,也可以很复 杂,需要采用分组和字符类,如空白,数字,字母或控制符.因为Java字符串基于统一字符编码(Unicode),正则表达式也适用于国际化的应用程序. 

Pattern类的方法简介

方法 说明
static Pettern compile(String regex,int flag) 编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写)
Matcher match(CharSequence input) 获取匹配器,input时输入的待处理的字符串
static boolean matches(String regex, CharSequence input) 快速的匹配调用,直接根据输入的模式regex匹配input

String[] split(CharSequence

input,int limit)

分隔字符串input,limit参数可以限制分隔的次数


Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。

Matcher类的方法简述

方法 说明
boolean matches() 对整个输入字符串进行模式匹配.
boolean lookingAt() 从输入字符串的开始处进行模式匹配
boolean find(int start)start处开始匹配模式
int groupCount() 返回匹配后的分组数目
String replaceAll(String replacement) 用给定的replacement全部替代匹配的部分
String repalceFirst(String replacement) 用给定的replacement替代第一次匹配的部分 
Matcher appendReplacement(StringBuffer sb,String replacement) 根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后
StringBuffer appendTail(StringBuffer sb) 将输入序列中匹配之后的末尾字串添加到sb当前位置之后.


代码整理(马士兵)

import java.io.*;
import java.util.regex.*;//正则表达式
/*范例名称:
 * 原文件名称:
 * 要点:
 * 1. 正则表达式--处理字符串(字符匹配)
 */

import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match;

public class RegExpressTest {
	public static void main(String[] args) throws Exception {
		///
		// 正则表达式概念
		///
		System.out.println("abc".matches("..."));// 一个点代表一个字符
		// 输出true
		printStr("a2312b".replaceAll("\\d", "-"));// '\d'代表数字, 最前面那个\是转义字符
		// 输出a---b
		Pattern p = Pattern.compile("[a-z]{3}");// 编译一种模式,速度快一些
		Matcher m = p.matcher("sun");
		printStr(m.matches());
		// 输出true

		///
		// . 一个
		// * 0个或多个
		// + 一个或多个
		// ? 0个或一个
		// []表示范围 &&交集
		///
		printStr("aaaa".matches("a*"));
		printStr("".matches("a*"));
		printStr("a".matches("a?"));
		printStr("192".matches("[0-2][0-9][0-9]"));
		printStr("A".matches("[a-zA-Z]"));
		printStr("R".matches("[A-Z && [RST]]"));
		printStr("\\".matches("\\\\"));// \匹配
		// email
		printStr("dulala@glogoo.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));

		// matches find lookingAt
		Pattern p2 = Pattern.compile("\\d{3,5}");
		String string = "123-34567-901-00";
		Matcher m2 = p2.matcher(string);
		printStr(m2.matches());
		m2.reset();
		printStr(m2.find());
		printStr(m2.start() + "-" + m2.end());
		printStr(m2.find());
		printStr(m2.start() + "-" + m2.end());
		printStr(m2.find());
		printStr(m2.start() + "-" + m2.end());
		printStr(m2.find());
		// printStr(m2.start()+"-"+m2.end());

		Pattern p3 = Pattern.compile("java", Pattern.CASE_INSENSITIVE);// 忽略大小写
		Matcher m3 = p3.matcher("Java, I love JAVA very javaja.");
		while (m3.find()) {
			printStr(m3.group());
			printStr(m3.start() + "-" + m3.end());
		}
		printStr(m3.replaceAll("JAVA"));

		// group () -- 数左小括号的编号
		Pattern p4 = Pattern.compile("(\\d{3,5})([a-z]{2})");
		Matcher m4 = p4.matcher("123aa-23433bb-124ccc-00");
		while (m4.find()) {
			printStr(m4.group(1));
		}

		
		// 抓取邮箱
		
		printStr("//");
		printStr("抓取邮箱");
		printStr("//");
		BufferedReader br = new BufferedReader(new FileReader("email.html"));
		String line = "";
		while ((line = br.readLine()) != null) {
			parse(line);
		}
		br.close();

		
		// qulifiers
		
		printStr("//");
		printStr("qulifiers--Greedy/Reluctant");
		printStr("//");
		Pattern p5 = Pattern.compile("(.{3,10})([0-9])");// Greedy
															// quantifiers这是默认的写法
		String strTemp = "abcd5fghi6df";
		Matcher m5 = p5.matcher(strTemp);
		if (m5.find()) {
			printStr("Greedy quantifiers结果");
			printStr(m5.start() + "-" + m5.end());// 0-10
		} else {
			printStr("Not match");
		}

		Pattern p6 = Pattern.compile("(.{3,10}?)([0-9])");// Reluctant
															// quantifiers
		m5 = p6.matcher(strTemp);
		if (m5.find()) {
			printStr("Reluctant quantifiers结果");
			printStr(m5.start() + "-" + m5.end());// 0-5
		} else {
			printStr("Not match");
		}

		// non-capturing groups
		
		// non-capturing groups 用得较少
		
		printStr("//");
		printStr("qulifiers--Greedy/Reluctant");
		printStr("//");
		Pattern p7=Pattern.compile(".{3}(?=a)");//a往前看3个字符
		Matcher m7=p7.matcher("234a67bcaa");
		while(m7.find()){
			printStr(m7.group());
		}
	}

	public static void printStr(Object o) {
		System.out.println(o);
	}

	// 匹配 邮件
	private static void parse(String line) {
		Pattern p = Pattern.compile("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+");// email正则表达式
		Matcher m = p.matcher(line);
		while (m.find()) {
			System.out.println(m.group());
		}
	}
}

结果

true
a----b
true
true
true
true
true
true
true
true
true
false
true
0-3
true
4-9
true
10-13
false
Java
0-4
JAVA
13-17
java
23-27
JAVA, I love JAVA very JAVAja.
123
23433
124
//
抓取邮箱
//
hpdrxiaoyu@sina.com
feb_209@163.com
yuulee@yahoo.cn
cjcdjk@126.com
xhy.163@163.com
joria0919@yahoo.cn
reido@163.com
luka19tong@163.com
471058178@qq.com
lhy_sophia08@cuc.edu.cn
tiffanylovelife@126.com
lychee1842@gmail.com
zyqwendy@hotmail.com
jinanzx@hotmail.com
littleppkid@gmail.com
winnitong@hotmail.com
yuanagao@gmail.com
yinyufeiyan@126.com
//
qulifiers--Greedy/Reluctant
//
Greedy quantifiers结果
0-10
Reluctant quantifiers结果
0-5
//
qulifiers--Greedy/Reluctant
//
234
7bc




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值