正则表达式中的?:是什么意思?
http://www.runoob.com/regexp/...
上面的网址有解释,还是不明白。能否举个例子详细的解释下这个符号的含义及用处?
正则表达式中的?:是什么意思?
http://www.runoob.com/regexp/...
上面的网址有解释,还是不明白。能否举个例子详细的解释下这个符号的含义及用处?
捕获组是在整个正则匹配里面获得一部分。可以在程序语言的正则api里用Group获得。正则表达式里也可以使用\1
里表示第1个捕获组,\2
表示第2个,以此类推。
而有些时候我们需要把一组字符放在一组,但是又不想让它成为一个捕获组。这时就可以用非捕获组(?:)
比如:
对于表达式 ([a-z])-(\d+)
ab-10 \1
为ab
tom-32 \1
为tom
对于表达式 (?:[a-z])-(\d+)
ab-10 \1
为10
tom-32 \1
为32
简单来说,
(?:)
就是为了分组,但是不捕获下来供正则表达式其他部分使用,就是说不能使用\1
,\2
这种捕获的子模式。举个例子
第一个匹配到了,没问题,普通的匹配
第二个就没匹配到,因为
\1
在这里无法识别,是非获取匹配第三个就匹配到了,因为
()
是获取性匹配,看后面的输出 数组中第二项是aa,匹配了这个子模式,可以供后续使用,后面的\1
就是匹配到的子模式aa。所以说(?:)的作用就是为了分组,它和()的区别在上面这个例子中已经表现出来了,至于它和普通模式的区别,就体现在分组的便利上。
上面的例子改一下:
两种写法是一样的匹配模式,但是用了分组之后,简洁了不少,这就是非获取匹配的最常用的作用