正则表达式基础

用途:

匹配文本,替换文本,是用来匹配和处理一些文本的字符串

注意:

正则表达式可以用来匹配包含着的字符串的内容模式

元字符.不匹配换行符

 

-(连字符)只有在 [ ] 里面有用,在其他地方没有用,所以在其他地方使用不需要转义

 

元字符:

匹配多个字符中的某一个

.字符可以匹配任何单个的字符、字符、数字甚至是.字符本身

利用字符集合区间

[ 和 ] 不匹配任何字符,他们只扶着定义一个字符集合,即在 [ ] 中的其中一个匹配的字符

-(连字符) 用来定义字符区间,如[0-9]他的功能和[0123456789]一行

取非匹配

除了那个字符集合里面的字符,其他字符都可以匹配,例如[^0-9] 匹配的是任何不是数字的字符

注意:^的效果将作用于给定字符集合里面的所有字符或字符区间 而不是仅限于^后面的哪一个字符和字符区间

 

对特殊字符进行转义

要匹配元字符,必须对元字符转义才可以匹配, 通过 反斜线转义

匹配空白字符

[\b] 回退(并删除)一个字符(Backspace键)

\f 换页符

\n 换行符

\r 回车符

\t 制表符(Tab键)

\v 垂直制表符

匹配数字非数字: \d \D

匹配字母和数字: \w \W

匹配空白字符(与非空白字符): \s \S

匹配十六进制或者八进制数值:

使用POSIX字符类

[:digit:] 任何数字

[:xdigit:] 任何十六进制数字

[:alpha:] 任何字母

[:lower:] 任何小写字母

[:upper:] 任何大写字母

[:alnum:] 任何字母或数字

[:cntrl:] ASCII控制字符(ASCII 0~31 和 ASCII 127)

[:punct:] 不属于[:alnum:]和[:cntrl:]的任何字符

[:blank:] 空格或制表符([\t ])

[:space:] 任何空白字符,包括空格([\f\n\r\t\v ])

[:print:] 任何可打印字符 [:graph:] 同[:print:],但不包括空格

 

匹配一个或者多个字符 +

[0-9]+ 匹配一个作者多个连续的数字

匹配零个或者多个字符 *

匹配零个或者一个字符 ?

 

匹配重复的次数:重复的次数要用{和}字符来给出,把数字写在他们之间

{3}意味着模式里面前一个字符必须在原始文本里面连续重复出现3次才算是一个匹配

为重复匹配次数设定一个区间

{2,4}的含义表示最少重复2次最多重复4次

匹配至少重复多少次

{3, }表示至少重复三次

防止过度匹配

贪婪类型:进可能的匹配字符

懒惰类型:进可能少的匹配字符

贪恋类型字符 懒惰类型字符

* *?

+ +?

{n, } {n, }?

 

位置配置

单词边界 \b \B

字符串边界: ^字符串开头 $字符串结尾

注意:^只有当它出现在一个字符集合里面(被放在[和]之间)并紧跟在左方括号[的后面时,它才能发挥

"求非"的作用,如果是在一个字符集合的外面并位于一个模式的开头,^将匹配一个字符串的开头

分行匹配模式:(?m)

 

使用子表达式

子表达式:把一个表达式划分为一系列的子表达式的的目的是为了把那些子表达式当做一个独立元素来使用

.子表达式必须用(和)括起来.

( ){2,}

(&nssp;)是一个子表达式,它将被视为一个独立的元素,而紧跟在它后面的{2, }将用作于这个子表达式(不仅仅是分号

(19|20)\d{2}

 

子表达式的嵌套:子表达式是允许嵌套的

 

子表达式的作用是把同一个表达式的各个相关的部分组合在一起,子表达式必须用(和)来定义.

常见用途:

对重复次数元字符的作用对象做出精确的设定和控制,对|操作符的OR条件做出准确的定义等,

如有必要,子表达式还允许嵌套使用

 

 

回溯引用

回溯引用指的是模式的后半部分引用在前半部分中定义的子表达式(可以把回溯引用想象成变量)

[ ]+(\w)[ ]+\1

[ ]+表示匹配一个或者多个空格,\1代表模式里的第一个子表达式.\2代表模式里的第2个表达式

注意:

1.不同的正则表达式在实现回溯引用的语法方面往往有着巨大大差异

2.回溯引用只能用来引用模式里的子表达式(用(和)括起来的正则表达式片段)

3.回溯引用匹配通常从1开始计数(\1 \2等).在许多实现里,第0个匹配(\0)可以用来代表整个正则表达式

回溯引用在替换操作中的应用

替换操作需要用到两个正则表达式:一个用来给出搜索模式.另一个用来给出匹配文本的替换模式.回溯引用

可以跨模式使用,在第一个模式里被匹配的子表达式可以用在第二个模式里

文本

313-555-1234

248-555-9999

810-555-9000

正则表达式

(\d{3}) (-) (\d{3}) (-) (\d{4})

替换

($1) $3-$5

结果

(313) 555-1234

(248) 555-9999

(810) 555-9000

划分五个子表达式

大小写转化:看表

 

前后查找

向前查找:指定了一个必须匹配但不在结果中返回的模式

语法:以?=开头的子表达式,需要匹配的文本跟在=后面

"消费";来表述"匹配和返回文本"的含义.在向前查找里,被匹配的文本不包含在最终返回的匹配结果里,

这被称作"不消费"

.+(?=:)

被匹配到的:并不显示在匹配结果里

向后查找

?<=

(?<=\$)只匹配$,但不消费它

注意:向前查找模式的长度是可变的,它们可以包含.和+之类的元字符,所以非常灵活

而向后查找模式只能是固定长度,这是一条机会所有的正则表达式都遵守的限制

对前后查找取非

操作符 说明

(?=) 正向前查找

(?!) 负向前查找

(?<=) 正向后查找

(?<!) 负先后查找

 

 

嵌入条件

(?(backreference)true-regex)

其中?表明这是一个条件,括号里的backreference是一个回溯引用,true-regx是一个只在backreference

存在时才会被执行的子表达式

(?(backreference)true-regex|fasle-regx)

(\()? \d{3} (?(1)\)|-) \d{3}-\d{4}

(\()?匹配一个可选的左括号,但是我们这次把它括起来得到了一个子表达式,随后的\d{3}匹配一位数字的区号

(?(1)\)|-)是一个回溯引用条件,他将根据条件是否得到满足而去匹配)或-:如果(1)存在(也就是找到一个左括号),

\)必须被匹配;否者,-必须匹配

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值