正则表达式

21 篇文章 3 订阅

正则表达式目的(最初是由Linux的sed和grep发展而来)

  • 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)

  • 可以通过正则表达式,从字符串中获取我们想要的特定部分。

 

目的

  • 验证: 表单提交时,进行用户名密码验证。

  • 查找: 从大量信息中快速提取指定内容。在一批url中,查找指定url 

  • 替换: 将指定格式的文本,进行正则匹配查找,找到之后进行特定替换,(vim文本替换等)

 

下面用grep命令用来验证正则表达式,grep是Linux下一个按行匹配文本的工具

  • -E:使用扩展正则匹配(如果不适用,使用的基本正则匹配,下面会讲)

  • --color:将匹配的内容进行语法高亮

 

.bashrc中加grep重命名了,如下,所以默认会显示匹配高亮

alias grep='grep --color=auto'

alias fgrep='fgrep --color=auto'

alias egrep='egrep --color=auto'

 

egrep等价于grep -E,它用的扩展正则匹配

 

基本要素

  • 字符类

  • 数量限定符

  • 位置限定符

  • 特殊符号

 

字符类

字符

含义

举例

.

匹配任意一个字符

abc.可以匹配abcd,abce等

[]

匹配括号中的任何一个字符

[abc]d可以匹配ad,bd,cd三种情况

-

在[]内表示字符的范围

[0-9a-fA-F]可以匹配一位十六进制数字

^

位于[]括号内的开头,匹配除括号中的字符之外的任何一个字符,表示非

[^xy]1可以匹配a1,b1,但不匹配x1,y1

[[ :xxx: ]]

grep工具预定义的一些命名字符类,注意只匹配一个

[[ :alpha: ]]匹配一个字母

[[ :digit: ]]匹配一个数字

举例

注:[]中的内容都只匹配一个字符

 

数量限定符

字符

含义

?

它前面的单元匹配零个或一个

+

它前面的单元匹配一个或多个

*

它前面的单元匹配零个或多个

{N}

它前面的单元精确匹配N次

{N , }

它前面的单元匹配至少N次

{ . M}

它前面的单元匹配至多M次

{N , M}

它前面的单元匹配最少N次,最多M次

举例

位置限定符

字符

含义

举例

^(在匹配内容的前面)

匹配行首的位置

^Content匹配位于一行开头的Content

$(在匹配内容的后面)

匹配行末的位置

;$匹配位于一行结尾的;,^$匹配空行

\<(在匹配内容的前面)

匹配单词开头的位置

\<th 匹配th开头的单词,比如this

\>(在匹配内容的后面)

匹配单词结尾的位置

p\> 匹配p结尾的单词,比如leap

\b

匹配单词开头或结尾的位置

\bat\b匹配a开头t结尾的单词,比如at

\B

匹配非单词开头和结尾的位置

\Bat\B匹配不是a开头且不是t结尾的单词,比如battery

举例

说明:其中\b用来限定是目标串中是否有以指定字符串开头的单词,称之为词界,\B称之为非词界

 

特殊符号

字符

含义

举例

\

转义字符,普通字符转义为特殊字符,特殊字符转义为普通字符

普通字符<写成\<表示单词开头位置,特殊字符.写成\.以及特殊字符\写成\\就是普通字符

()

将正则表达式的一部分括起来组成一个单元(前面的数量限定符都是以单元为单位的,而不是字符)

([0-9]{1,3}\.){3}[0-9]{1,3}表示IP地址

|

连接两个子表达式,表示或的关系

n(o|either)匹配no或neither

举例

 

正则表达式的分类

  • 基本(Basic)正则表达式(基本正则表达式将?+{}|()这些字符解释成了普通字符)

  • 扩展(Extended)正则表达式(上面讲的这一些都是扩展正则表达式)

  • Perl正则表达式(Perl语言的正则表达式,一种更高级更简便的正则表达式)

基本和扩展正则表达式两者的区别就是对一些特殊字符的解释不同( ?+{}|()  )。

举例

 

以下是一些常见\转义的字符集

符号

替换规则

匹配

\d

[0-9]

匹配数字字符

\D

[^0-9]

匹配非数字字符

\w

[a-zA-Z0-9_]

匹配数字字母和下划线(注意还有下划线)

\W

[^\w]

匹配非数字字母和下划线

\s

[_\r\t\n\f]

匹配空白区域

\S

[^\s]

匹配非空白区域

我们来试试效果

???没效果?那是因为这个Perl语言才有的转义字符集,加上-P选项就好了

正则表达式的贪婪模式与非贪婪模式

贪婪模式(.*):正则表达式去匹配时,会尽量多的匹配符合条件的内容(grep就是贪婪模式的正则匹配)

非贪婪模式 (.*?):正则表达式去匹配时,会尽量少的匹配符合条件的内容,也就是说,一旦发现匹配符合要求,立马就匹配成功

 

可以看到,非贪婪模式的标识符,就是贪婪模式的标识符后面加上一个?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值