Regex

来源:互联网 发布:好用的隔离霜 知乎 编辑:程序博客网 时间:2024/05/21 10:04
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,}?|
---------------------------------


替换操作:

<span style="font-family:Courier New;">/** * 将匹配到的字符进行替换 */@Testpublic 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})













0 0
原创粉丝点击