打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

主要使用的有下面三种:

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:"字符串。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
一篇超详细的正则表达式简明指南
正则表达式真的很骚,可惜你不会写!!!
正则表达式学习经验分析
*正则表达式详解(一)正则表达式初步
烦人的正则表达式(一)
C#结合正则表达式判断各种用户输入合法性
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服