正则表达式 Regex Expression

正则表达式

Regex Expression

 

本文会对正则表达式进行全面的总结和解析,可以做为入门资料和参考书

 

一.初级语法与解析

1.     常用字符类

 

语法

解析

例子

/d

任何一个0-9的数字

065489

/D

任何一个非数字字符

@,  a,  f,  “,  *

/w

任何一个单词字符,数字和字母

A, d, g,  5,  0,  8

/W

任何一个非单词字符

@,  ^,  (

/s

任何一个空白字符

空格,TAB符,换行符

/S

非空白字符

A%5

.

任意一个字符

》,a5 *

[…]

包含在括号中的字符

[abc] -----abc, [a-z] -----a,d,f,z

[^…]

只要不是在括号的字符

[abc]-----d,f,e,g,h,#,4

 

2.字符位置类

 

语法

解析

例子

^

其后的模式必须在字符串的开始处,或者是任一行的开始处(当出来多行匹配时)

^/d=====1ddd

!=====dddd

$

其前的模式必须在字符串的结尾处,或者是任一行的结尾处(当出来多行匹配时)

与上面的相反

/A

前面的模式必须在字符串的开始处,多行模式将被忽略

 

/z

前面的模式必须在字符串的结尾处,多行模式将被忽略

 

/Z

前面的模式必须在字符串的末尾处,或是换行符前

 

/b

位于一个单词的开始,匹配一个单词的边界

 

/B

匹配一个单词非边界,不是一个单词的开始

 

 

3.字符重复符

语法

解析

例子

{n}

前面模式将匹配n

d{5}=====ddddd

{n,}

前面模式至少匹配n

d{2,}=====dd,dddd,ddddd

d{2,}!=====d

{n,m}

前面模式匹配的次数在n—m之间 ,n可以为0,包含nm

a{2,4}=====aa,aaa,aaaa

?

前面的模式匹配0次或1

da?===da,d

+

前面的模式匹配1-无数次

Da+====Da ,Daaa,Daaaaaa

*

前面的模式匹配0或无数次

Fe*====F,Fe,Feeeeeee

 

4.转义序列

 

转义符

解析

//

相当于字符 /

/^

相当于字符 ^

/*

相当于字符 *

/.

相当于字符 .

/+

相当于字符 +

/?

相当于字符 ?

/(

相当于字符 (

/)

相当于字符 )

/}

相当于字符 }

/{

相当于字符 {

/|

相当于字符 |

/n

换行符

/t

TAB

/v

垂直制表符

/r

回车符

/f

换页符

/nnn

匹配一个三位的八进制ASCII

/unn

匹配一个两位的十六进制 ASCII

/xnnn

匹配一个4位的十六进制数的Unicode字符

/cV

匹配一个控制字符  /cV===CTRL+V

 

 

5.其他标志(JS)

i

忽略大小写

M

多行标志

G

全局匹配

 

二.高级语法与解析

 

1.      分组

 

捕获: ( )

 

在此括号内的模式被组合成一个捕获组,它所包含的模式所匹配的字符将会被包含到最终的匹配结果中.

:

([a-z]{3})/d

它匹配: sss1,ddd2,ggg3, 其中的sss,ddd,ggg就分别是一个捕获组.

 

非捕获: (?:)

 

在此括号内的模式不会被组合成一个捕获组,但是它所包含的模式所匹配的字符将会被包含到最终的匹配结果中.

 

2.      决策:  |

,它代表如果此符号前面的模式不能够找到匹配的字符则用此符号后面的模式来寻找匹配.如果前面的模式已经找到了,后面将会被忽略!

:[a-z] | [A-Z]

, a 可以匹配,A也可以匹配此模式.

 

3.声明

 

正声明: (?=)

它规定了在括号中声明的模式必须出现在声明的右侧,声明将不会包含在终于匹配的结果中.

:

REGEX: (?=/.net)

字符串: There are ASP.net c.net, Jscript.net !

上面的匹配结果为:

ASP

c

Jscript

 

负声明: (?!)

它规定了在括号中声明的模式不能紧贴在声明的右侧,声明将不会包含在终于匹配的结果中.

就是说寻找在括号内模式左边符合条件的字符.

 

REGEX:  /d{3,}(?![A-Z])

字符串: 111A 444c 555 4444E

上面匹配结果是:

444

555

 

反向正声明: (?<=)

它规定了在括号中声明的模式必须出现在声明的左侧,声明将不会包含在终于匹配的结果中.

就是说寻找在括号内模式右边符合条件的字符.

:

REGEX:  (?<=/New)[A-Z][a-z]+

字符串: New Zland China Town New York

上面匹配结果为:

Zlang   York

 

非回溯: (?>)

 

它防止了REGEX引擎为了匹配成功而进行回溯,被成为贪婪的子表达式.

REGEX默认是回溯的.

REGEX: .*ing

将会匹配所有后面带ing的字符串,但是如果加上(?>.*)ing就不行了!

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值