正则表达式一般用于字符串匹配、查找、替换、分割。例如:从网页中找出email地址,IP地址是否正确,从网页中找出连接等等。
| 符号 | 意思 |
|---|
| \|反斜杠 | |
| \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 | 前一个匹配的结束 |
| ^ | 限制开头 ^java 条件限制为以Java为开头字符 |
| $ | 限制结尾 java$ 条件限制为以java为结尾字符 |
| . | 限制除\n以外任意一个单独字符 java.. 条件限制为java后除换行外任意两个字符 |
| [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范围中一个字符(交集) |
| * | 限制条件为特定字符出现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出现。 |
| {} | 限制条件为连续出现指定次数字符。 例如, J{2} JJ; J{3} JJJ; J{3,} JJJ,JJJJ,JJJJJ…..(3次以上J并存);J{a,b} 有a个以上,b个以下的J |
| | | 限制条件为两者取一。例如,Java |
举例
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人。");
boolean b = matcher.matches();
System.out.print(b+"");
/**
* 结果为: true
*/
Pattern pattern = Pattern.compile("[,|]+");
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (String str:strs) {
System.out.print(str+" ");
}
/**
* 结果为: Java Hello World Java Hello World Sun
*/
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
System.out.print(matcher.replaceFirst("Java"));
/**
* 结果为: Java Hello World,正则表达式 Hello World
*/
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
System.out.print(matcher.replaceAll("Java"));
/**
* 结果为: Java Hello World,Java Hello World
*/
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.print(sbr.toString());
/**
* 结果为: Java Hello World,正则表达式 Hello World
*/
String str = "www.ceponline@yahoo.com.cn";
Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@([\\w\\-]+\\.)+[\\w-]+");
Matcher matcher = pattern.matcher(str);
System.out.print(matcher.matches() + "");
/**
* 结果为: true
*/
Pattern pattern = Pattern.compile("<[^>]+>");
Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主页</a>");
System.out.print(matcher.replaceAll(""));
/**
* 结果为: 主页
*/
Pattern pattern = Pattern.compile("href=/\"(.+?)/\"");
Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主页</a>");
if (matcher.find()) {
System.out.print(matcher.group(1));
}
/**
* 结果为: index.html
*/
Pattern pattern = Pattern.compile("https?://[\\w.]*");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
if (matcher.find()) {
System.out.print(matcher.group());
}
/**
* 结果为: http://dsds
*/
比较常用的正则表达式
| 字符 | 代表意义 |
|---|
| [\u4e00-\u9fa5] | 匹配中文字符 |
| \n\s*\r | 匹配空白行,可用来删除空白行 |
| ^\s*|\s*$ | 匹配首尾空白字符 |
| \w+([-+.]\w+)*@\w+([-+.]\w+)* | 验证Email地址 |
| https?://[^\s]* | 匹配URL地址 |