基于Java的正则表达式
正则表达式概念
正则表达式,又称正规表示法、常规表示法(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。正则表过式用于操作字符串数据。
String类里有一个方法
publicbooleanmatches(Stringregex)告知此字符串是否匹配给定的正则表达式。
参数:regex-用来匹配此字符串的正则表达式
返回:当且仅当此字符串匹配给定的正则表达式时,返回true
符号简介:
\\匹配反斜线字符
\r匹配回车符
\t匹配制表符
\f匹配换页符
\n匹配换行符
[abc]匹配abc中的一个
[^abc]匹配除了abc中的一个
[a-z]匹配指定范围内的任意一个字符,例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
[A-Z]匹配指定范围内的任意一个字符,例如,“[A-Z]”可以匹配“A”到“Z”范围内的任意大写字母字符。
[a-d[m-p]]匹配[a-dm-p]并集//abcdmnop中的一个
[a-z&&[^bc]]匹配[ad-z]范围内的任意字符//取a-z中的任意但不能取bc
[a-z&&[^m-p]]匹配[a-lq-z]范围内的任意字符//取a-z中的任意但不能取mnop
[a-z&&[def]]匹配def交集中的任意字符
.匹配除“\r\n”之外的任何单个字符
\d匹配一个数字字符。等价于[0-9]
\D匹配一个非数字字符。等价于[^0-9]
\s匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]
\S匹配任何可见字符。等价于[^\f\n\r\t\v]
\w匹配单词字符:等价于[a-zA-Z_0-9]
\W匹配任何非单词字符。等价于[^A-Za-z0-9_]
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
\b匹配一个单词边界
\B匹配非单词边界
?匹配一次或一次没有
*匹配0次或多次
+匹配1次或多次
{n}匹配恰好n次
{n,}匹配至少n次
{n,m}匹配至少n次,但不能超过m次匹配
\1后向引用,表示表达式中,从左往右数,第一个左括号对应的括号内的内容。以此类推,\2表示第二个,\0表示整个表达式
使用String类中的matches方法例子:匹配手机号码是否正确
publicclassRegDemo{ publicstaticvoidmain(String[]args){ Stringtel="13800001111"; Stringreg="1[358]\\d{9}";//1[358][0-9]{9} booleanb=tel.matches(reg); System.out.println(tel+":"+b); } }
切割:使用String类中的split方法例子:切割字符串
publicclassRegDemo{ publicstaticvoidmain(String[]args){ Stringstr1="wang_yu_hang"; Stringstr2="zhaofei"; Stringstr3="tang.chun.lai"; String[]strarr1=str1.split("_"); String[]strarr2=str2.split("+"); String[]strarr3=str3.split("\\."); for(Stringstr:strarr1){ System.out.println(str); } } }
替换:使用String类中的replaceAll方法例子:替换字符串
publicclassRegDemo{ publicstaticvoidmain(String[]args){ Stringstr="helloworld"; str=str.replaceAll("o","xx"); System.out.println(str); Stringss="tel12344556qq4564654add4646767"; ss=ss.replaceAll("\\d{4,}","#");//4个或4个以上的数字连在一起的换成# System.out.println(ss); } }
叠词替换:想要替换重复出现的单词,例如aabbbcccc任何的单词都有可能重复,所以使用.(点)匹配任意字符.然后使用()括号将该单词封装到组中.为了重复使用某些规则就将规则封装为了组.使用()\11是组号,\1引用了组.就是组中是什么这个位置也是什么.取值时,使用$1取第一个括号(组)中的值,以此类推。
获取:其实使用的是java.util.regex.Pattern类;java.util.regex.Matcher类
Matcher类中的常用方法:
publicbooleanfind()尝试查找与该模式匹配的输入序列的下一个子序列。
publicStringgroup()返回由以前匹配操作所匹配的输入子序列。
publicintstart()返回以前匹配的初始索引。
publicintend()返回最后匹配字符之后的偏移量。
例子:获取字符串
publicclassRegDemo{ publicstaticvoidmain(String[]args){ Patternp=Pattern.compile(“a*b”);//将正则表达式进行对象封装 Matcherm=p.matcher(“aaaaab”);//用正则表达式的方法matcher和字符串关联,获取对字符串操作的匹配对象 Matcherbooleanb=m.matches();//通过Mather匹配器对象的方法对字符串进行操作 System.out.println(b);//匹配返回true,不匹配则返回false } }