php正则修/(\d){2}与/(\d)(\d)匹配到的子模式为什么不一样?

lidequan 发布于 2016/04/21 08:58
阅读 339
收藏 0
<?php
$parten1='/(\d){2}/';
$parten2='/(\d)(\d)/';
preg_match($parten1,'abc12ef',$arr1);
var_dump($arr1);
/*array (size=2)
  0 => string '12' (length=2)
  1 => string '2' (length=1)*/
preg_match($parten2,'abc12ef',$arr2);
var_dump($arr2);
/*array (size=3)
  0 => string '12' (length=2)
  1 => string '1' (length=1)
  2 => string '2' (length=1)*/
加载中
0
阿信sxq
阿信sxq
不要随便使用小括号
lidequan
lidequan
我是要测试一下,以下几种匹配子模式的区别 $parten1='/(\d){2}/'; $parten2='/(\d)(\d)/'; $parten3='/\d(\d)/'; $parten4='/(\d\d)/'; 后面三种好理解,但是第一种就不怎么理解
0
螃蟹大叔
螃蟹大叔
一个括号一个子模式(\d){2}这种写法真心没看懂,应该是(\d{2})吧
lidequan
lidequan
@刘万杰 好的,谢谢啦
螃蟹大叔
螃蟹大叔
回复 @lidequan : 不要纠结为什么会这样,你知道会这样就行了,以后就不会再踩着个坑了
lidequan
lidequan
比如我的目的是匹配"geno56"中的连续两个数字,并通过子模式获取其中第一个数字,我知道$parten='/(\d)\d/'; preg_match($parten,'geno56',$arr);这样可以实现。我只是好奇为什么'/(\d){2}/'不可以实现,经过测试发现'/(\d){2}/'不等同'/(\d)(\d)/',反而等同于'/\d(\d)','/(\d)(\d)/'也可以实现。
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部