博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java_正则表达式
阅读量:4031 次
发布时间:2019-05-24

本文共 5310 字,大约阅读时间需要 17 分钟。

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());		}	}}
结果

truea----btruetruetruetruetruetruetruetruetruefalsetrue0-3true4-9true10-13falseJava0-4JAVA13-17java23-27JAVA, I love JAVA very JAVAja.12323433124//抓取邮箱//hpdrxiaoyu@sina.comfeb_209@163.comyuulee@yahoo.cncjcdjk@126.comxhy.163@163.comjoria0919@yahoo.cnreido@163.comluka19tong@163.com471058178@qq.comlhy_sophia08@cuc.edu.cntiffanylovelife@126.comlychee1842@gmail.comzyqwendy@hotmail.comjinanzx@hotmail.comlittleppkid@gmail.comwinnitong@hotmail.comyuanagao@gmail.comyinyufeiyan@126.com//qulifiers--Greedy/Reluctant//Greedy quantifiers结果0-10Reluctant quantifiers结果0-5//qulifiers--Greedy/Reluctant//2347bc

你可能感兴趣的文章
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
部分笔试算法题整理
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
retext出现Could not parse file contents, check if you have the necessary module installed解决方案
查看>>
pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口
查看>>
linux mint下使用外部SMTP(如网易yeah.net)发邮件
查看>>