1. 字符集中的取非操作:[^a-zA-Z0-9] -->表示不包括数字和字母.^ 表示非(只有在[]中,且紧跟[之后才表示非).
2.元字符:
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
匹配数字
\d 任何一个数字([0-9])
\D 任何一个非数字字符([^0-9])
字母数字
\w 任何一个字母,数字或下划线字符([a-zA-Z0-9_])
\w ([^a-zA-Z0-9_]) 表示非
空白字符
\s 任何一个空白字符([\f\n\r\t\v])
\S 任何一个非空白字符([^\f\n\r\t\v])
匹配邮箱: [\w.]+@[\w.]+\.\w+ | \w+[\w.]*@[\w.]+\.\w+ --->hr.sima64@163.com
3.重复出现匹配
. + * ?(出现0次或1次)
{n} -->表示{}前面的元素出现n次 (\w{6} )
{m,n} -->表示{}最少出现m次,最多出现n次
{m,} -->表示{}最少出现m次.
防止贪婪匹配: 遇到第一个匹配的就进行匹配.
--------------------------------
|贪婪型元字符 懒惰型元字符|
| |
| **? |
| ++? |
| {m,}{m,}? |
---------------------------------
4.位置匹配:
①.单词边界:\b 表示单词的开始或结尾 (\w \b \W) 只匹配一个位置,不匹配任何字符
\b 匹配的是一个这样的位置------这个位置位于一个能够用来构成单词的字符(字母,数字和下划线,也就是与\w相匹配的字符)
和一个不能用来构成单词的字符(也就是与\W 相匹配的字符)之间。
②.^ : 表示字符串开始位置
③.$ : 表示字符串结束位置
^.*$ ---> 不能匹配有回车符的字符串
④.分行匹配:把行分隔符当做一个字符串分隔符.(?m) (?m)^\\s*[/\\*//]\\s*.* java中所有注释行
5.子表达式:
匹配IP地址:
(((\d{1,2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))
6.回溯引用: 模式的后部分引用前面的[子]表达式
替换操作: 将一个邮件变为可以点击的 : sima64@163.com (\w+[\w.]*@[\w.]+\.\w+) <a href="$1">$1</a>
-----> <a href="baidu@163.com">baidu@163.com</a>
大小写转换:
\E 结束\L或\U转换
\l 把下一个字符转为小写
\L 把\L到\E之间的字符全部转换为小写
\u 把下一个字符变为大写
\U 把\U到\E之间的字符全部变为大写
$1\U$2\$3 把$2对应的字母变为大写
7.前后查找:
①.向前查找: (?=:) 只包含 冒号: 之前的内容 http://www.baidu.com ---->http
②.向后查找: (?<=:) 只包含冒号 : 之后的内容 均不包含匹配到的内容
③.回溯引用条件(嵌入条件java不支持):
?(1)true|false ------> ^(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}$ 只有1对应的引用出现时才会匹配true,否则匹配false部分.
------> \d{5}(?(?=-)-\d{4})
?(m) m可以是对前面子表达式的引用,也可以是一个子表达式.(?(?=-)-\d{4})
2.元字符:
\f 换页符
\n 换行符
\r 回车符
\t 制表符
\v 垂直制表符
匹配数字
\d 任何一个数字([0-9])
\D 任何一个非数字字符([^0-9])
字母数字
\w 任何一个字母,数字或下划线字符([a-zA-Z0-9_])
\w ([^a-zA-Z0-9_]) 表示非
空白字符
\s 任何一个空白字符([\f\n\r\t\v])
\S 任何一个非空白字符([^\f\n\r\t\v])
匹配邮箱: [\w.]+@[\w.]+\.\w+ | \w+[\w.]*@[\w.]+\.\w+ --->hr.sima64@163.com
3.重复出现匹配
. + * ?(出现0次或1次)
{n} -->表示{}前面的元素出现n次 (\w{6} )
{m,n} -->表示{}最少出现m次,最多出现n次
{m,} -->表示{}最少出现m次.
防止贪婪匹配: 遇到第一个匹配的就进行匹配.
--------------------------------
|贪婪型元字符 懒惰型元字符|
| |
| **? |
| ++? |
| {m,}{m,}? |
---------------------------------
替换操作:
<span style="font-family:Courier New;"> /**
* 将匹配到的字符进行替换
*/
@Test
public void testReplace(){
String text = "sima64@163.com is good email";
String regex = "(\\w+[\\w.]*@[\\w.]+\\.\\w+)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(text);
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
//替换:$1 表示正则中第一个子表达式匹配到的内容
matcher.appendReplacement(buffer, "<a href=\"$1\">$1</a>");
}
matcher.appendTail(buffer);
System.out.println(buffer.toString());
}
</span>
4.位置匹配:
①.单词边界:\b 表示单词的开始或结尾 (\w \b \W) 只匹配一个位置,不匹配任何字符
\b 匹配的是一个这样的位置------这个位置位于一个能够用来构成单词的字符(字母,数字和下划线,也就是与\w相匹配的字符)
和一个不能用来构成单词的字符(也就是与\W 相匹配的字符)之间。
②.^ : 表示字符串开始位置
③.$ : 表示字符串结束位置
^.*$ ---> 不能匹配有回车符的字符串
④.分行匹配:把行分隔符当做一个字符串分隔符.(?m) (?m)^\\s*[/\\*//]\\s*.* java中所有注释行
5.子表达式:
匹配IP地址:
(((\d{1,2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]\d{1})|(25[0-5]))
6.回溯引用: 模式的后部分引用前面的[子]表达式
替换操作: 将一个邮件变为可以点击的 : sima64@163.com (\w+[\w.]*@[\w.]+\.\w+) <a href="$1">$1</a>
-----> <a href="baidu@163.com">baidu@163.com</a>
大小写转换:
\E 结束\L或\U转换
\l 把下一个字符转为小写
\L 把\L到\E之间的字符全部转换为小写
\u 把下一个字符变为大写
\U 把\U到\E之间的字符全部变为大写
$1\U$2\$3 把$2对应的字母变为大写
7.前后查找:
①.向前查找: (?=:) 只包含 冒号: 之前的内容 http://www.baidu.com ---->http
②.向后查找: (?<=:) 只包含冒号 : 之后的内容 均不包含匹配到的内容
③.回溯引用条件(嵌入条件java不支持):
?(1)true|false ------> ^(\()?\d{3}(?(1)\)|-)\d{3}-\d{4}$ 只有1对应的引用出现时才会匹配true,否则匹配false部分.
------> \d{5}(?(?=-)-\d{4})
?(m) m可以是对前面子表达式的引用,也可以是一个子表达式.(?(?=-)-\d{4})