本文共 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