正则表达式(Regular Expression)

正则表达式是用于处理字符串的强大工具,本文详细介绍了其基本语法,包括元字符、量词、预查等,并列举了常见正则表达式模式,如匹配汉字、邮政编码等。同时,探讨了在Java中的使用注意事项,帮助读者深入理解并熟练运用正则表达式进行文本匹配和筛选。
摘要由CSDN通过智能技术生成

简介

正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。

正则表达式是对于字符串而言,利用定义的一系列符号,用有限的字符来表达无限的字符串序列,从而达到对大量文本的过滤筛查。

正则表达式语法

注:Java正则表达式中,为防⽌表达式元字符被Java编译器当作转义字符吃掉,需要多加⼀个"\",例如正则表达式"\d",在java中要写成"\\d".

元字符

描述

\

将下⼀个字符标记符、或⼀个向后引⽤、或⼀个⼋进制转义符。例如,“\\n”匹配\n。“\n”匹配换⾏符。序列“\\”匹配“\”⽽“\(”则匹配“(”。即相当于多种编程语⾔中都有的“转义字符”的概念。

^

匹配输⼊字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。

$

匹配输⼊字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。

*

匹配前⾯的⼦表达式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。

+

匹配前⾯的⼦表达式⼀次或多次(⼤于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价     于{1,}。

?

匹配前⾯的⼦表达式零次或⼀次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。

{n}

n是⼀个⾮负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

{n,}

n是⼀个⾮负整数。⾄少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。

“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

{n,m}

m和n均为⾮负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。

“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

?

当该字符紧跟在任何⼀个其他限制符(*,+,?,{n},{n,},{n,m})后⾯时,匹配模式是⾮贪婪的。⾮贪婪模式尽可能少的匹       配所搜索的字符串,⽽默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配      单个“o”,⽽“o+”将匹配所有“o”。

.点

匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使⽤像“[\s\S]”的模式。

(pattern)

匹配pattern并获取这⼀匹配。所获取的匹配可以从产⽣的Matches集合得到,在VBScript中使⽤SubMatches集合,在

JScript中则使⽤$0…$9属性。要匹配圆括号字符,请使⽤“\(”或“\)”。

(?:pattern)

匹配pattern但不获取匹配结果,也就是说这是⼀个⾮获取匹配,不进⾏存储供以后使⽤。这在使⽤或字符“(|)”来组合⼀个模式的各个部分是很有⽤。例如“industr(?:y|ies)”就是⼀个⽐“industry|industries”更简略的表达式。

(?

=pattern)

正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是⼀个⾮获取匹配,也就是说,该匹配不需要获取      供以后使⽤。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹

配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在⼀个匹配发⽣后,在最后⼀次匹配之后⽴即开始       下⼀次匹配的搜索,⽽不是从包含预查的字符之后开始。

(?!pattern)

正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是⼀个⾮获取匹配,也就是说,该匹配不需要获      取供以后使⽤。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹

配“Windows2000”中的“Windows”。

(?

<=pattern)

反向肯定预查,与正向肯定预查类似,只是⽅向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。

(?

<!pattern)

反向否定预查,与正向否定预查类似,只是⽅向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。

x|y

匹配x或y。例如,“z|food”能匹配“z”或“food”或"zood"(此处请谨慎)。“(z|f)ood”则匹配“zood”或“food”。

[xyz]

字符集合。匹配所包含的任意⼀个字符。例如,“[abc]”可以匹配“plain”中的“a”。

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意⼩写字母字符。

[a-z]

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表⽰字符的范围;     如果出字符组的开头,则只能表⽰连字符本⾝.

[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字     符。

\b

匹配⼀个单词边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,⼀种是匹配字符,⼀种是匹配     位置,这⾥的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。

\B

匹配⾮单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

\cx

匹配由x指明的控制字符。例如,\cM匹配⼀个Control-M或回车符。x的值必须为A-Z或a-z之⼀。否则,将c视为⼀个原       义的“c”字符。

\d

匹配⼀个数字字符。等价于[0-9]。

\D

匹配⼀个⾮数字字符。等价于[^0-9]。

\f

匹配⼀个换页符。等价于\x0c和\cL。

\n

匹配⼀个换⾏符。等价于\x0a和\cJ。

\r

匹配⼀个回车符。等价于\x0d和\cM。

\s

匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

\S

匹配任何可见字符。等价于[^ \f\n\r\t\v]。

\t

匹配⼀个制表符。等价于\x09和\cI。

\v

匹配⼀个垂直制表符。等价于\x0b和\cK。

\w

匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这⾥的"单词"字符使⽤Unicode字符集。

\W

匹配任何⾮单词字符。等价于“[^A-Za-z0-9_]”。

\xn

匹配n,其中n为⼗六进制转义值。⼗六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使⽤ASCII编码。

\num

匹配num,其中num是⼀个正整数。对所获取的匹配的引⽤。例如,“(.)\1”匹配两个连续的相同字符。

\n

标识⼀个⼋进制转义值或⼀个向后引⽤。如果\n之前⾄少n个获取的⼦表达式,则n为向后引⽤。否则,如果n为⼋进制数      字(0-7),则n为⼀个⼋进制转义值。

\nm

标识⼀个⼋进制转义值或⼀个向后引⽤。如果\nm之前⾄少有nm个获得⼦表达式,则nm为向后引⽤。如果\nm之前⾄少       有n个获取,则n为⼀个后跟⽂字m的向后引⽤。如果前⾯的条件都不满⾜,若n和m均为⼋进制数字(0-7),则\nm将匹      配⼋进制转义值nm。

\nml

如果n为⼋进制数字(0-7),且m和l均为⼋进制数字(0-7),则匹配⼋进制转义值nml。

\un

匹配n,其中n是⼀个⽤四个⼗六进制数字表⽰的Unicode字符。例如,\u00A9匹配版权符号(©)。

\< \>

匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the  wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都⽀持的。

\( \)

将 \( 和  \)  之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到⼀个临时区域(⼀个正则表达式中最多可以保存9 个),它们可以⽤ \1 到\9 的符号来引⽤。

|

将两个匹配条件进⾏逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都⽀持的。

+

匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都⽀持的。

?

匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都⽀持的。

{i} {i,j}

匹配指定数⽬的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符"A"后⾯跟着正好3个数字字符的串,

例如A123、A348等,但是不匹配A1234。⽽正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字

常⽤正则表达式

规则

正则表达式语法

⼀个或多个汉字

^[\u0391-\uFFE5]+$

邮政编码

^[1-9]\d{5}$

QQ号码

^[1-9]\d{4,10}$

邮箱(默认前缀、后缀不以'_'、'-'、'.'结尾)

^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$

⽤户名(字母开头 + 数字/字母/下划线)

^[A-Za-z][A-Za-z1-9_-]+$

⼿机号码

^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$

URL

^((http|https)://)?([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

( ^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])| (10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值