正则表达式-非捕获组

 

非捕获组 (?:xxx)

使用 (?: ) 包含其他表达式,可使被包含的表达式组成一个整体,在被修饰匹配次数时,可作为整体被修饰。

 

说明

与普通分组不同的是,非捕获组不记录所匹配的内容,比普通分组更节约内存资源。

通过格式 (?ismg-ismg:xxx) 可对匹配模式进行修改,修改后的模式只对当前非捕获组内部起作用。

举例

匹配一个URL链接,当中可以有端口或者没有端口号,如下

url1 = "http://fatkun.com:8080"

url2 = "http://fatkun.com"

如果有端口号需要匹配端口号,如果没则忽略它

正则表达式:\/{0,2}([0-9.\-A-Za-z]+)(?::(\d+))?$

url1匹配结果

$0 = //fatkun.com

$1 = fatkun.com

$2 = 8080

url2匹配的$2结果为空

解释

\/{0,2} 匹配//

([0-9.\-A-Za-z]+) 匹配fatkun.com

(?::(\d+))? 注意这里的(?:),这里是非捕获分组,判断是不是有:开头的数字,把匹配的数字取出

 




fatkun

22条评论

我对正则的了解也就到这里了,顶多加一点点零宽断言。
太复杂了其实也用的少~一般够用了

发表评论

电子邮件地址不会被公开。