正则表达式

正则表达式

在线正则表达式测试:http://tool.oschina.net/regex/
正则表达式基础 正则表达式概述
常用字符集合
元字符
转义字符
分组
“^“和”$”

概述
一、正则表达式概述
1、为什么要使用正则表达式
编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要(比如注册用户账号时,密码只能设置6~32位)。

为什么使用正则表达式
2.什么是正则表达式
正则表达式(regular expression)就是用来描述字符串逻辑规则的工具
很多语言多对正则表达式提供了支持,例如JavaScript、Java等;
不同语言中使用正则表达式时,正则表达式的具体编写规则会有些小的差别,但是大体相同

二、常用字符集合
正则表达式本身也是个字符串。由一些普通字符和一些元字符组成。
普通字符包括大小写的字母和数字,而元字符就是具有特殊的含义的字符

1普通字符集
正则表达式 描述
[xyz] 表示匹配x,y或z中任意一个字符
[^xyz] 表示匹配除x,y,z以外的任意一个字符
[a-z] 匹配介于a到z之间的任意一个字符
[a-zA-Z0-9] 匹配介于a到z,或A到Z,或0到9的任意一个字符
[x|y] 匹配x或y中任意一个字符
[a-z&&[^abcd]] 匹配a到z中不包含a,b,c,d的任意一个字符
元字符
2匹配matches方法
public boolean matches(String regex)
String类提供了将一个字符串与给定的正则表达式匹配,返回匹配结果(全匹配)的方法

案例:定义表达式字符串,用matches方法测试上面字符集合
String reg1="[xyz]"; System.out.println(“x”.matches(reg1));//true System.out.println(“X”.matches(reg1));//false 正则表达式区分大小写 String reg2="[^xyz]"; String reg3="[a-z]"; String reg4="[a-zA-Z0-9]"; String reg5="[x|y]"; String reg6="[a-z&&[^abcd]]"; System.out.println(“x”.matches(reg2));//匹配除x,y,z以外的任意一个字符 System.out.println(“m”.matches(reg3));//匹配介于a到z之间的任意一个字符 System.out.println(“1”.matches(reg4));//匹配介于a到z,或A到Z,或0到9的任意一个字符 System.out.println(“y”.matches(reg5);//匹配x或y中任意一个字符 System.out.println(“m”.matches(reg6));//匹配a到z中不包含a,b,c,d的任意一个字符

三、元字符
正则表达式 描述
\d 匹配一个数字字符。等价于[0-9]
\D 匹配一个非数字字符。等价于[^0-9]
\s 匹配空白字符,包括空格、制表符、换页符等等
\S 匹配任何非空白字符
\w 匹配包括下划线的任何单词字符。相当于“[A-Za-z0-9_]”
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
. 匹配除“\r\n”之外的任意字符
元字符
public class Test1 { public static void main(String[] args) { String s1="\d"; String s2="\D"; String s3="\s"; String s4="\S"; String s5="\w"; String s6="\W"; String s7="."; System.out.println(“2”.matches(s1));//匹配一个0到9数字字符 System.out.println(“a”.matches(s2));//匹配一个非数字字符 System.out.println(" “.matches(s3));//匹配一个空白字符 System.out.println(“c”.matches(s4));//匹配任意一个非空白字符 System.out.println(“d”.matches(s5));//匹配包括下划线的任何单词字符 System.out.println(”*".matches(s6));//匹配任何非单词字符 System.out.println(“b”.matches(s7));//匹配除“\r\n”之外的任意字符 } }

数量元字符
正则表达式 说明
A? A表达式出现0次或者一次
A+ A表达式出现一次或者多次
A* A表达式出现0次或者多次
A{n} A表达式出现n次
A{n,} A表达式至少出现n次
A{n,m} A表达式至少出现n次,最多出现m次
元字符
案例:
邮政编码,0-9数字出现6次
[0-9][0-9][0-9][0-9][0-9][0-9]
可以简化[0-9]{6}
再次简化\d{6}
规则解释:左边紧邻的字符出现6次

匹配用户名规则,可以出现8~10个单词或字符
\w{8,10}

案例:
public class Test2 { public static void main(String[] args) { String reg1="\d{6}"; String reg2="[0-9]{6}"; String reg3="\w{8,10}"; String reg4="\s?"; System.out.println(“123456”.matches(reg1));//匹配\d{6},即匹配6个数字 System.out.println(“647789”.matches(reg2));//匹配[0-9]{6},即匹配6个数字 System.out.println(“absnchdh”.matches(reg3));//匹配出现8到10个单词或字符 System.out.println(" ".matches(reg4));//匹配空白(空格)出现 0-1 次 String reg5 = “^Java.*”;//查找以Java开头,任意结尾的字符串 System.out.println(“Java不是人”.matches(reg5)); } }

四、转义字符
在正则表达式规则中,有12个字符被保留作特殊用途。他们是:
[ ] \ ^ $ . | ? * + ( )
比如“+”代表的是数量出现1到多次的意思,但有时候需要匹配“加”号本身比如“+0086”的匹配规则,则需要通过转义字符“\”来实现转换含义。也就是说在正则表达式中"+"默认是数量词,需要转义才能变成“加号”的意思,所以正确的匹配规则为:
+[0-9]{4}

在Java中,要注意,“\”是特殊的字符,会先被编译器处理,然后再传递给正则引擎
Java中正确定义正则方法:"\+[0-9]{4}"

五、分组
正则表达式中可以通过"()“来分组,将括号里面的一系列正则表达式看做一个整体。
如:验证整数或者小数:1+([.][0-9]+){0,1}$
中圆括号里面的规则([.][0-9]+)表示将出现”."一次,0~9数字一次以上
([.][0-9]+){0,1}表示圆括号里面的内容会出现0~1次

六、"^“和” " 边 界 匹 配 “ ” 表 示 从 字 符 串 开 头 位 置 匹 配 “ " 边界匹配 “^”表示从字符串开头位置匹配 “ "”表示匹配到字符串结尾位置
如:匹配用户名规则,可以出现6~10个单词或字符
\w{6,10}
^\w{6,10}$
如果使用第一种写法,字符串"woaibeijing_1"是可以通过验证的
而使用第二种规则,表示必须从头到尾完全匹配,则不能通过验证(注意不能用matches()方法验证,matches()方法本身就是全匹配,第一种写法也无法通过验证)

案例:
检测用户名或密码是否合法,第一个字符必须是英文,可以包含大小写英文、下划线、0-9数字,长度为6~16位。 正则规则:2\w{5,15}$
public class Test3 { public static void main(String[] args) { String s1="3\w{5,15}$"; System.out.println(“abcdefg012345678”.matches(s1)); } }


  1. 0-9 ↩︎

  2. a-zA-Z ↩︎

  3. a-zA-Z ↩︎

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值