Java正则表达式基础
2017-11-02 20:23
260 查看
Java正则表达式基础
1 使用建议
使用正确的边界匹配器(^、$、\b、\B等),限定搜索字符串位置尽量不适用通配符”.”;字符使用具体的元字符、字符类(\d、\w、\s等)
使用正确的量词(+、*、?、{n,m}),如果能够限定长度,匹配最佳
使用非捕获组、原子组,减少没有必要的字匹配捕获用(?:),减少内存
2 常用预定义匹配符
// 反斜杠 /t 间隔 ('/u0009') /n 换行 ('/u000A') /r 回车 ('/u000D') /d 数字 等价于[0-9] /D 非数字 等价于[^0-9] /s 空白符号 [/t/n/x0B/f/r] /S 非空白符号 [^/t/n/x0B/f/r] /w 单独字符 [a-zA-Z_0-9] /W 非单独字符 [^a-zA-Z_0-9] /f 换页符 /e Escape /b 一个单词的边界 /B 一个非单词的边界 /G 前一个匹配的结束 ^为限制开头 $为限制结尾 . 条件限制除/n以外任意一个单独字符
3 正则表达式中的组
正则表达式中,使用() 将一个表达式代表一个组,每组在整个 表达式中都有对应的引用。 整个表达式,默认是第 0 组,所以说自己声明的组 从 1 开始。用()括起来的,表示自定义一个组合类型。
4 正则表达式中的特定限制条件
加入特定限制条件「[]」。[a-z] 条件限制在小写a to z范围中一个字符 [A-Z] 条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9] 条件限制在小写0 to 9范围中一个字符 [0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 [0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)
[]中加入^后加再次限制条件「[^]」.
[^a-z] 条件限制在非小写a to z范围中一个字符 [^A-Z] 条件限制在非大写A to Z范围中一个字符 [^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 [^0-9] 条件限制在非小写0 to 9范围中一个字符 [^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 [^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)
5 正则表达式中的匹配量词
在限制条件为特定字符出现0次以上时,可以使用「*」J* 0个以上J .* 0个以上任意字符 J.*D J与D之间0个以上任意字符
在限制条件为特定字符出现1次以上时,可以使用「+」
J+ 1个以上J .+ 1个以上任意字符 J.+D J与D之间1个以上任意字符
在限制条件为特定字符出现有0或1次以上时,可以使用「?」
JA? J或者JA出现
限制为连续出现指定次数字符「{a}」
J{2} JJ J{3} JJJ
文字a个以上,并且「{a,}」
J{3,} JJJ,JJJJ,JJJJJ,???(3次以上J并存)
文字个a以上,b个以下「{a,b}」
J{3,5} JJJ或JJJJ或JJJJJ
两者取一「|」
J|A J或A Java|Hello Java或Hello
6 非打印不可见字符
“非打印不可见字符”实属于ASCII 码中的控制字符,它们是(十进制表示)0到31、以及127。分别代表什么可查询ASCII码表。Java用的是Unicode编码,8位的ASCII码包含在Unicode中,是从0~127的。◆去除文本的非打印字符
/** * 替换掉文本的不可见字符,其中"换行符,回车符"不需替换 * @param content * @return */ public static String filter(String content) { if (content != null && content.length() > 0) { char[] charArr = content.toCharArray(); //换行,回车不替换 for (int i = 0; i < charArr.length; i++) { if (((charArr[i] < 0x20) && (charArr[i] != 0x0A) && (charArr[i] != 0x0D)) || charArr[i] == 0x7F) { charArr[i] = 0x20; } } return new String(charArr); } return ""; }
7 使用示例
下面写出几个简单的Java正则用例:◆比如,在字符串包含验证时
//查找以Java开头,任意结尾的字符串 Pattern pattern = Pattern.compile("^Java.*"); Matcher matcher = pattern.matcher("Java不是人"); boolean b= matcher.matches(); //当条件满足时,将返回true,否则返回false System.out.println(b);
◆以多条件分割字符串时
Pattern pattern = Pattern.compile("[, |]+"); String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun"); for (int i=0;i<strs.length;i++) { System.out.println(strs[i]); }
◆文字替换(首次出现字符)
Pattern pattern = Pattern.compile("正则表达式"); Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World"); //替换第一个符合正则的数据 System.out.println(matcher.replaceFirst("Java"));
◆文字替换(全部)
Pattern pattern = Pattern.compile("正则表达式"); Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World"); //替换第一个符合正则的数据 System.out.println(matcher.replaceAll("Java"));
◆文字替换(置换字符)
Pattern pattern = Pattern.compile("正则表达式"); Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World "); StringBuffer sbr = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(sbr, "Java"); } matcher.appendTail(sbr); System.out.println(sbr.toString());
◆验证是否为邮箱地址
String str="ceponline@yahoo.com.cn"; Pattern pattern = Pattern.compile("[//w//.//-]+@([//w//-]+//.)+[//w//-]+",Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(str); System.out.println(matcher.matches());
◆截取http://地址
“`
//截取url
Pattern pattern = Pattern.compile(“(http://|https://){1}[//w//.//-/:]+”);
Matcher matcher = pattern.matcher(“dsdsdshttp://dsds//gfgffdfdfdf”);
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
buffer.append(matcher.group());
buffer.append(“/r/n”);
System.out.println(buffer.toString());
}
相关文章推荐
- java正则表达式基础
- 一. 黑马程序员—-java基础—-正则表达式
- Java基础学习总结(35)——Java正则表达式详解
- Java基础_12_正则表达式
- 黑马程序员——Java 基础 正则表达式(复习)
- Java基础视频教程第25天_正则表达式
- Java基础(十)——Sting类及包装类、其它对象、正则表达式
- 黑马程序员_Java基础_正则表达式,校验QQ号,手机号,邮箱,IP地址排序,网络爬虫
- 黑马程序员__JAVA基础__正则表达式
- java基础之String类与正则表达式
- Java基础——正则表达式语法
- 正则表达式基础及java使用
- Java生涯——Java基础---正则表达式
- 黑马程序员——Java基础——正则表达式
- 黑马程序员-----java基础(正则表达式和反射)
- 黑马程序员 java基础之正则表达式
- 黑马程序员---从头开始,回忆JAVA基础之正则表达式。
- Java基础之正则表达式
- Java基础_正则表达式
- Java基础学习总结(35)——Java正则表达式详解