正则表达式匹配模式、正负向预查及递归规则

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

1、匹配边界

^

匹配一个输入或一行的开头

$

匹配一个输入或一行的结尾

 2、匹配出现次数

*

匹配前面元字符0次或多次

+

匹配前面元字符1次或多次

?

匹配前面元字符0次或1次

{n}

精确匹配n次

{n,}

匹配n次以上

{n,m}

匹配n-m次

3、匹配多种字符的表达式

[xyz]

匹配这个集合中的任一一个字符

[^xyz]

不匹配这个集合中的任何一个字符

4、匹配系列字符集合

\b

匹配一个单词的边界

\B

匹配一个单词的非边界

\d

匹配一个数字字符,等于[0-9]

\D

匹配一个非数字字符,等于[^0-9]

\n

匹配一个换行符

\r

匹配一个回车符

\s

匹配一个空白字符,等于[\n\f\r\t\v]

\S

匹配一个非空白字符,等于[^\n\f\r\t\v]

\t

匹配一个制表符

\v

匹配一个重直制表符

\w

匹配一个可以组成单词的字符、下划线、数字,实际是除了([0-9a-zA-Z_])还包含了希腊字母,俄文等字母

\W

匹配一个不可以组成单词的字符、下划线及数字

5、正向预查

(?:pattern)匹配结果。Java(?:6|7)等效于Java6|Java7,结果Java6 Java7

(?=pattern)

正向匹配。Java(?=6),匹配后面跟着6的Java,即第一个Java,结果Java6 Java7
(?!pattern)正向不匹配。Java(?!6),匹配后面不跟着6的Java,即第二个Java,结果Java6 Java7

6、反向预查

(?<=pattern)反向匹配。(?<=J)a,匹配紧跟字母J后面的a,结果Java6 Java7
(?<!pattern)反向不匹配。(?<!J)a,不匹配紧跟字母J后面的a,结果Java6 Java7

备注:Javascript不支持反向预查

7、正则递归(?R)

$string = "some text (aaa(b(c1)(c2)d)e)(test) more text";
preg_match_all("/\((([^()]*|(?R))*)\)/", $string, $matches);

 正则递归代码:

\((([^()]*|(?R))*)\)

以下对各层进行说明

/
    \(    #看到这里的转义左括号没有?这里是入口,意味着这个正则会从左括号开始匹配
        ( #这里是分组用
            (
                [^()]*|(?R)  #这里就是递归,相当于[^()]*|(\((([^()]*|递归....
            )* #这对括号加上一个星*表明,我要重复递归这件事。
        )
    \)
/

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值