黑马程序员--java基础--正则表达式总结
2014-02-24 21:04
525 查看
------- android培训、java培训、期待与您交流! ----------
目录:1.正则概述 2.常用符号及易错点 3.正则使用 4.String类中的正则
1.正则概述
Pattern:正则表达式的编译表示形式
指定为字符串的正则表达式必须首先被编译为此类的实例。
Matcher:通过解释
执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
典型的调用顺序:
String regex =\\w+@\\w+[.]((com)|(cn));
String str = "xxxxxxxxxxxxxx";
Pattern p = Pattern.compile(regex);
Matcher m = p.
boolean b = m.
仅使用一次正则表达式时,可以方便地通过此类定义
boolean b = Pattern.matches(regex,str);
等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
2.常用符号及易错点
1. . 匹配单个字符 * 匹配0至多个在它之前的字符 + 匹配前面的子表达式一次或多次
?匹配前面的子表达式零次或一次 | 将两个匹配表达式做或运算
2. [ ]匹配括号中的任意一个字符 { } 匹配次数
() 将()之间括起来的表达式定义为组group,从左到右计算其开括号来编号。
将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。
3. ^ 匹配一行的开始 ^spring $匹配一行的结束 SPRING$
4. 组:这个概念很重要,组是用括号划分的正则表达式,可以通过编号来引用组。
组号从0开始,有几对小括号就表示有几个组,并且组可以嵌套,
组号为0的表示整个表达式,组号为1的表示第一个组,依此类推。
例如:A(B)C(D)E正则式中有三组,组0是ABCDE,组1是B,组2是D;
A((B)C)(D)E正则式中有四组:组0是ABCDE,组1是BC,组2是B;组3是C,组4是D。
易错点:
\ 的使用:在其他语言中,\\表示要插入的是一个字符,java中\\表示要插入的是正则表达式中的反斜线,
与后面的字符连在一起有特殊意义,如\\d,\\w等。
如何在java的正则中插入一个\字符:代码为\\\\,因为在java中\\表示一个\。
但是如果在java中使用回车换行等,则不需要多添加反斜线了,如回车直接为\r。
3.正则使用
a.Matcher类的方法:
boolean matches():尝试将整个区域与正则匹配
boolean find():尝试查找与该模式匹配的下一个子序列
String group():返回由以前匹配操作所匹配的输入子序列
Matcher reset():重置匹配器,依然对原序列进行匹配
Mathcer reset(CharSequence input):重置此具有新输入序列的匹配器,对新的输入序列进行匹配
代码如下:
4.String类中的几个正则方法
个人理解为String类中关于正则的几个方法是为了使用方便而定义,不需要每次都去获取匹配器。
总共有以下方法:
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
代码示例:
String[] split(String regex):根据给定的正则表达式来匹配拆分此字符串
等同于 Pattern.compile(regex).split(str);
String[] split(String regex,int limit): 同上,只是限定了匹配模式的使用情况
等同于 Pattern.compile(regex).split(str);
String replaceAll(String regex, String replacement ):使用给定的replacement替换
此字符串所有匹配给定正则表达式的子字符串。
代码示例如下:
代码示例:对IP地址进行排序
------- android培训、java培训、期待与您交流! ----------
目录:1.正则概述 2.常用符号及易错点 3.正则使用 4.String类中的正则
1.正则概述
Pattern:正则表达式的编译表示形式
指定为字符串的正则表达式必须首先被编译为此类的实例。
Matcher:通过解释
Pattern对执行字符串匹配操作的引擎。
执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
典型的调用顺序:
String regex =\\w+@\\w+[.]((com)|(cn));
String str = "xxxxxxxxxxxxxx";
Pattern p = Pattern.compile(regex);
Matcher m = p.
matcher(str);
boolean b = m.
matches();
仅使用一次正则表达式时,可以方便地通过此类定义
matches方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
boolean b = Pattern.matches(regex,str);
等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。
2.常用符号及易错点
1. . 匹配单个字符 * 匹配0至多个在它之前的字符 + 匹配前面的子表达式一次或多次
?匹配前面的子表达式零次或一次 | 将两个匹配表达式做或运算
2. [ ]匹配括号中的任意一个字符 { } 匹配次数
() 将()之间括起来的表达式定义为组group,从左到右计算其开括号来编号。
将匹配这个表达式的字符保存到一个临时区域,这个元字符在字符串提取的时候非常有用。
3. ^ 匹配一行的开始 ^spring $匹配一行的结束 SPRING$
4. 组:这个概念很重要,组是用括号划分的正则表达式,可以通过编号来引用组。
组号从0开始,有几对小括号就表示有几个组,并且组可以嵌套,
组号为0的表示整个表达式,组号为1的表示第一个组,依此类推。
例如:A(B)C(D)E正则式中有三组,组0是ABCDE,组1是B,组2是D;
A((B)C)(D)E正则式中有四组:组0是ABCDE,组1是BC,组2是B;组3是C,组4是D。
易错点:
\ 的使用:在其他语言中,\\表示要插入的是一个字符,java中\\表示要插入的是正则表达式中的反斜线,
与后面的字符连在一起有特殊意义,如\\d,\\w等。
如何在java的正则中插入一个\字符:代码为\\\\,因为在java中\\表示一个\。
但是如果在java中使用回车换行等,则不需要多添加反斜线了,如回车直接为\r。
3.正则使用
a.Matcher类的方法:
boolean matches():尝试将整个区域与正则匹配
boolean find():尝试查找与该模式匹配的下一个子序列
String group():返回由以前匹配操作所匹配的输入子序列
Matcher reset():重置匹配器,依然对原序列进行匹配
Mathcer reset(CharSequence input):重置此具有新输入序列的匹配器,对新的输入序列进行匹配
代码如下:
public static void main(String[] args) throws IOException { // 定义正则并获取匹配器: String regex = "(\\w)+[\\.](\\w)+[\\.]((com)|(cn))"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(""); System.out.println(matcher.matches()); // 打开网络资源 URL url = new URL("http://www.hao123.com/"); URLConnection urlConnection = url.openConnection(); InputStream ips = urlConnection.getInputStream(); BufferedReader bufr = new BufferedReader(new InputStreamReader(ips)); String line = null; // 对网络内容进行匹配并输出符合匹配模式的字符串,注意每一行都要重置具有新输入序列匹配器 while((line=bufr.readLine())!=null){ //对新输入序列进行重新匹配 matcher.reset(line); while(matcher.find()){ 4000 System.out.println(matcher.group()); } } // 关闭网络资源 ips.close();
4.String类中的几个正则方法
个人理解为String类中关于正则的几个方法是为了使用方便而定义,不需要每次都去获取匹配器。
总共有以下方法:
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
代码示例:
System.out.println("--------检验是否符合QQ号码规则----------"); 获取输入的QQ字符串 String strNum = new Scanner(System.in).nextLine(); 定义正则:不能以0开头,5-10位数字 String regex = "[^0][\\d]{4,9}"; 进行匹配 boolean matchResult = strNum.matches(regex); System.out.println(matchResult);
String[] split(String regex):根据给定的正则表达式来匹配拆分此字符串
等同于 Pattern.compile(regex).split(str);
String[] split(String regex,int limit): 同上,只是限定了匹配模式的使用情况
等同于 Pattern.compile(regex).split(str);
String replaceAll(String regex, String replacement ):使用给定的replacement替换
此字符串所有匹配给定正则表达式的子字符串。
代码示例如下:
// 去除重复汉字,要求打印效果为:我是程序员 String str = "我我我我....是是是是是....程程程程程...序。。。员"; // 1.去除非汉字字符 String resultStr = str.replaceAll("[(\\.)|(。)]", ""); // 2.定义重复字符的正则,定义替代元素,注意组的重复和单个字符的区别,注意$的使用 String regex1 = "(.)\\1+"; String replacement1 = "$1"; String finalStr = resultStr.replaceAll(regex1, replacement1); System.out.println(finalStr);
代码示例:对IP地址进行排序
String ipStr = "23.125.35.12 23.45.56.123 45.65.255.45"; String ipStrRegex = ipStr.replaceAll("(\\d+)", "00$1"); String ip = ipStrRegex.replaceAll("0*(\\d{3})", "$1"); String[] ipArr = ip.split(" "); TreeSet<String> ts = new TreeSet<String>(); for(String ipEle : ipArr){ ts.add(ipEle); } for(String ipEle : ts){ System.out.println(ipEle.replaceAll("0*(\\d+)","$1")); }
------- android培训、java培训、期待与您交流! ----------
相关文章推荐
- 黑马程序员 16 Java基础教学 - 16 - 正则表达式总结
- 黑马程序员---Java基础总结---正则表达式
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- 黑马程序员-Java基础总结14——正则表达式
- 黑马程序员 Java自学总结十七 正则表达式
- 黑马程序员-Java基础、正则表达式
- Java基础学习总结(4)——常用正则表达式列表
- 黑马程序员 知识点总结-Java正则表达式
- 黑马程序员_Java基础_正则表达式
- 黑马程序员--Java基础--正则表达式、反射机制
- 黑马程序员-java基础(十)-反射、正则表达式
- 黑马程序员-java基础 正则表达式
- 黑马程序员——Java基础---正则表达式
- 黑马程序员——java基础——正则表达式
- 黑马程序员-Java基础-正则表达式
- 黑马程序员_java基础笔记(08)...GUI,网络编程,正则表达式
- 黑马程序员java基础之之正则表达式
- 黑马程序员——java基础_正则表达式
- 黑马程序员——Java基础-----正则表达式
- 黑马程序员---------------JAVA基础--------正则表达式