标签:
正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。(百度百科)
我自己的理解是一个匹配指定文本的工具,用于检验文本是否符合指定的规范,操作指定格式的文本。
匹配备选列表中的某个字符,比如abcd:[abcd],- 符号标识区间,如0-9 a-z A-z。
由这条可以推出以下几条语法:
匹配一个数字:[0-9],因为这条很常用,所以提供了简化符号\d(java中\\d)来表示一个数字
匹配一个字母:[a-zA-Z]
匹配一个字母或数字:简化符号\\w
匹配特殊字符,如空格和Tab符:\s 换行符:\n 制表符:\t
不匹配某个字符,如不想匹配x:[^x], [^aeiou]匹配除了aeiou这几个字母以外的任意字符。同样可以和上面的符号进行组合,[^0-9],[^d],[^w]用于表示排除这个范围。
对于简化符号\d,\w的否定可以用大些来替代,如\D,\W
或条件,x|y匹配x或y。例如,"z|food"能匹配"z"或"food"或"zood"(此处请谨慎)。"(z|f)ood"则匹配"zood"或"food"
位置限定,$限定字符串开头,^限定字符串结尾,如$t[abcd]t^ 匹配tat,tbt,tct,tdt。不匹配rtat,tatr。
个数描述
*匹配0次或多次
. 匹配任意一个字符
+ 至少一次
? 至多一次
{n} 准确匹配n次
{n,}至少匹配n次
{n,m}匹配n到m次
组的概念
在正则中所有的个数描述符的作用对象都是前一个单位,这个单位通常是一个字符,但是组的概念可以把多个字符组成一个单位,也就是组。在正则中用()来表示。
例如:(text){3}匹配texttexttext,(text)把text看成一个整体。这里还有一个小问题,如何匹配()这一类的元字符,在正则表达式中想要匹配元字符统一用\进行转义。
贪婪非贪婪匹配
非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。当?字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。例如,对于字符串"oooo","o+?"将匹配单个"o",而"o+"将匹配所有"o"。
匹配中文字符:[\u4e00-\u9fa5]
匹配空白行:\n\s*\r
匹配Email地址:
匹配网址URL:[a-zA-z]+://[^\s]*
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\{7,8}
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配中国邮政编码:[1-9]\d{5}(?!\d)
匹配18位身份证号:^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$
匹配整数:^-?[1-9]\d*$
匹配浮点数:^-?[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
基本用法,获得Pattern,Matcher。接下来的所有操作都是基于Matcher的。
String line = "gender=12;name=tom"; String regex = "gender=(\\d+);name=(\\w+)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(line); |
检验方法,用于检验匹配程度
matcher.matches() 用于检验是否严格匹配正则表达式
matcher.find() 用于检验是否有部分匹配了正则表达式
组操作
matcher.groupCount() 用于统计匹配组的个数
matcher.group(n) 用于提取第n个匹配的分组内容
比如下面这个例子,匹配后可以分别获得两个匹配组的具体内容
String line = "gender=12;name=tom"; String regex = "gender=(\\d+);name=(\\w+)"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(line); System.out.println(matcher.groupCount()); System.out.println(matcher.group(1)); System.out.println(matcher.group(2)); |
替换方法(replacement methods)用于在输入的字符串中替换文本有用处的方法。
appendReplacement(StringBuffer sb, String rep):实现非结尾处的增加和替换操作。
appendTail(StringBuffer sb):实现结尾处的增加和替换操作。
replaceAll(String rep):使用给定的字符串来替换输入序列中匹配模式的每一个子序列。
replaceFirst(String rep):使用给定的字符串来替换输入序列中匹配模式的第一个子序列。
标签:
原文地址:http://www.cnblogs.com/AlwaysFixBug/p/4882531.html