正则表达式

一、引入

什么是正则表达式呢?由于在编写程序时,经常会遇到一种情况,就是输入某个数据,pa该数据是否合法。例如我们平时在输入电话号码、邮箱又或者注册时填写昵称等等各种情况时,在我们输入数据后,系统常常会告诉我们,我们的输入是否有效。那么如何实现这个功能呢?这时就要借助正则表达式了。判断

二、概念

 

正则表达式(regular expression ,简写为regex)是一个字符串,用来描述匹配一个字符串集合的模式。在字符串的处理中,正则表达式是一个强大的工具。使用正则表达式可以匹配、替换和分割字符串。

三、匹配字符串

在前面的引入中,我们提到正则表达式是用来验证用户输入。在String类中有equals方法和matches方法。两种方法看上去似乎是差不多的。例如,

以上两个语句返回值都是true。

但是,matches方法比equals更加强大,equals判断两个字符串是否相等,而matches则是判断字符串是否匹配某一个模式。例如,

以上三条语句返回值都是true,这是因为“java.*”是一个正则表达式,描述了一个字符串模式,即从Java开始,后面跟着0个或多个字符串。“.*”可以匹配任何0个或多个字符。

三、正则表达式语法

正则表达式匹配示例
x指定字符xJava匹配[Java]
.任意单个字符Java匹配[J..a]
(ab|cd)ab或者cdten匹配t(en|im)
[abc]a、b或者cJava匹配JJa[uvwx]a
[^abc]

除开a、b或者c外的任意字符

Java匹配Ja[^ars]a
[a-z]a到zJava匹配[A-M]av[a-d]
[^a-z]除开a到z的所有字符Java匹配[^b-d]
[a-e[m-p]]a到e或m到pJava匹配[A-G[I-M]]av[a-d]
[a-e&&[c-p]]a到e和c到p的交集Java匹配[A-P&&[I-M]]av[a-d]
\d个位数即[0-9]Java2匹配Java[\\d]
\D一位非数字$Java匹配[\\D][\\D]Java
\w单词字符Java1匹配[\\w]ava[\\w]
\W非单词字符$Java匹配[\\W][\\W]Java
\s空白字符Java 2匹配Java\\s2
\S非空白字符Java匹配[\\S]ava
p*模式p的0或多次出现

aaaabb匹配a*bb

ababab匹配(ab)*

p+模式p的1或多次出现

a匹配a+b*

able匹配(ab)+.*

p?模式p的0或1次出现

Java匹配J?Java

Java匹配J?ava

p{n}

模式p的正好n次出现

Java匹配Ja{1}.*

Java不匹配.{2}

p{n,}模式p的至少n次出现

aaaa匹配a{1,}

a不匹配{2,}

p{n,m}模式p出现次数位于n和m间(不包含)

aaaa匹配啊{1,9}

abb不匹配a{2,9}bb

注意:1、单词字符包括任何的字母、数字或者下划线字符。

2、*、+、?、{n}、{n, }、{n,m}称为量词符,用于确定量词符前面的模式会重复多少次。

3、不能在重复量词符中使用空白。例如A{3,6}不能写成A{3,6}.

4、可以使用括号来将模式进行分组。例如(ab){3}匹配ababab,ab{3}abbb。

四、替换和分割字符

如果字符串匹配正则表达式,String类的matches方法放回true。string类也包含了repalceAll、replaceFirst和split方法,用于替换和分割字符串。

这是replaceAll和replaceFirst的样例。 

有两个重载的split方法,split(regex)方法使用匹配的分割符将一个字符串分割为子字符串。例如

就是将字符串“JavaHTML2Perl”分割为Java、HTML以及Perl并保存在tokens[0],tokens[1]和tokens[2]中。

在split(regex,limit)方法中,limit参数确定模式匹配多少次。如果limit<=0,split(regex,limit)等同于split(regex)。如果limit>=0,模式最多匹配limit-1次。例如

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值