Java正则表达式
2019-01-15 本文已影响0人
lycknight
正则表达式一般用于字符串匹配、查找、替换、分割。例如:<font color=green>从网页中找出email地址,IP地址是否正确,从网页中找出连接等等。</font>
符号 | 意思 | |
---|---|---|
|反斜杠 | ||
\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 | 前一个匹配的结束 | |
^ | 限制开头 <font color=orange>^java 条件限制为以Java为开头字符</font> | |
$ | 限制结尾 <font color=orange>java$ 条件限制为以java为结尾字符</font> | |
. | 限制除\n以外任意一个单独字符 <font color=orange>java.. 条件限制为java后除换行外任意两个字符</font> | |
[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次以上,<font color=orange>例如, J* 0个以上J;.* 0个以上任意字符;J.*D J与D之间0个以上任意字符</font> | |
+ | 限制条件为特定字符出现1次以上。 <font color=orange>J+ 1个以上J ; .+ 1个以上任意字符; J.+D J与D之间1个以上任意字符。</font> | |
? | 限制条件为特定字符出现有0或1次以上。<font color=orange>例如,JA? J或者JA出现。</font> | |
{} | 限制条件为连续出现指定次数字符。 <font color=orange>例如, J{2} JJ; J{3} JJJ; J{3,} JJJ,JJJJ,JJJJJ.....(3次以上J并存);J{a,b} 有a个以上,b个以下的J</font> | |
限制条件为两者取一。<font color=orange>例如,Java | Hello Java或Hello</font> |
举例
- 在字符串包含验证时
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
*/
- 去除html标记
Pattern pattern = Pattern.compile("<[^>]+>");
Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主页</a>");
System.out.print(matcher.replaceAll(""));
/**
* 结果为: 主页
*/
- 查找html中对应条件字符串
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
*/
- 截取http://地址
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地址 |