php正则表达式小括号的作用,正则表达式中小括号的应用

在正则表达式中小括号的应用种类比较多,差别也很大

主要使用的有下面三种:

1. (...)

Grouping. Group items into a single unit that can be used with *, +,

?, |, and so on. Also remember the characters that match this group for

use with later references.

2. (?:...)

Grouping only. Group items into a single unit, but do not remember the characters that match this group.

3.

(?=p) A positive lookahead assertion. 或

(?!p) A negative lookahead assertion.

用于测试的字符串:url(skins/default/images/index/default.png)

红色字符为匹配上的结果

第一种,用于普通分组,能记住匹配该分组的字符串,并且可以在以后通过\1的方式来引用所匹配到的分组

eg: (\/)匹配url(skins/default/images/index/default.png)

(\/)default\1匹配url(skins/default/images/index/default.png)

第二种,用于分组,不记录匹配该分组的字符串

eg: (?:\/)default匹配url(skins/default/images/index/default.png)

第一、二两种方式匹配的结果里都包含有该分组匹配到的结果,在例子中是"/default"中的"/"

第三种,只用于确定位置,最终结果里并不包含该括号匹配到的结果

eg: (?!\/)default匹配url(skins/default/images/index/default.png)

eg: default(?=\/)匹配url(skins/default/images/index/default.png)

正向预查

比如:

有一个字符串:

abcdefghi

/ab(c)/ 将匹配出来abc 并将c储存到$1

/ab(?:c)/ 将匹配出来abc 并不会将c储存到$1

/ab(?=c)/ 将匹配出来ab,没有匹配出abc,那么c起什么作用呢,限定作用,解释器找到ab后没有马上返回,而是再查查ab后面的是c吗? 如果是c则才返回ab,否则返回匹配失败。看来它预查了c,难怪命名为正向预查。

我个人觉得这个匹配有个替代方法,可以去匹配/(ab)c/,然后通过$1取出ab,我觉得牛的是下面的这个符号!

=====

=====

反(逆)向预查

=号变为了!号,!表示非,可见这是一个非操作,这个是否可以解决开始的问题呢?

比如:

有一个字符串:

abcdefghi

/ab(?=c)/ 将匹配出来后面紧跟着c的ab

推理:

/ab(?!c)/ 将匹配出来后面紧跟着不是c的ab,在这个字符串里,将匹配不出结果。

ok, 看看开始的问题是否能否解决。

要获取[后面不是ab的匹配,那么可以使用/\[(?!ab)/来匹配一个后面不是ab的[符号,

ok,这个确定后,再去匹配其他任何字符: /\[(?!ab).*?\]/

ok,问题解决。

使用正则式想匹配的字符串中排除一个字符串

((?!Name:).)*

排除"Name:"字符串。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值