非捕获组 (?: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+))? 注意这里的(?:),这里是非捕获分组,判断是不是有:开头的数字,把匹配的数字取出