正则表达式的子模式的深层分析
< PHP
$时间=日期(当前H:我:);
$模式2{ { 4 } } - { 2 } { 2 } { 2 } }:{ 2 };
如果(preg_match(美元美元美元模式,ARR)){
;
print_r($ ARR);
;
}
>
显示结果:
阵列
(
{ 0 } = > 2012-06-23 03:08:45
)
您注意到结果只有一个数据,即匹配匹配模式的时间格式。如果只有一个记录,为什么我们需要用数组保存它呢用绳子直接得救不是更好吗
这个问题,我们看看正则表达式的子模式。
在正则表达式中,可以使用(和)将子模式中形成一个模式。当模式视为一个整体,它相当于一个单字符。
例如,我们将代码更改为如下所示:
< PHP
$时间=日期(当前H:我:);
$模式(({ { 4 })-( { 2 })-( { 2 })):( { 2 }):( { 2 })i ;
如果(preg_match(美元美元美元模式,ARR)){
;
print_r($ ARR);
;
}
>
注意:我只修改了$模式,在匹配模式下,使用圆括号()
实施结果:
阵列
(
{ 0 } = > 2012-06-23 03:19:23
{ 1 } = 2012
{ 2 } = 06
{ 3 } = 23
{ 4 } = 03
{ 5 } = 19
{ 6 } = 23
)
总结:我们可以使用括号的匹配模式进行分组,默认情况下,每个分组会自动拥有一个组号,规则是:从左到右,以左括号分组标志为第二组,1组的第一次亮相,作为集团的2号,将其中的。0组对应于整个正则表达式。
在将整个正则匹配模式分组后,向后引用可进一步用于重复搜索前一组的匹配文本。例如, 1表示与组1匹配的文本, 2表示与包2匹配的文本,等等。
我们可以进一步修改代码,如下所示:
< PHP
$时间=日期(当前H:我:);
$模式(({ { 4 })-( { 2 })-( { 2 })):( { 2 }):( { 2 })i ;
$替换= $时间格式为:$ 0替换格式:1,3,4, 5秒6;
打印preg_replace(合模式,取代美元,美元的时间);
如果(preg_match(美元美元美元模式,ARR)){
;
print_r($ ARR);
;
}
>
小心 uff1a
因为它是双引号,所以采用分组时,两个反斜杠应该被使用,例如 1,如果一个单引号,反斜线可以使用,如1。
1用于捕获数据包的一个内容:2012,用于捕获数据包6中的内容6。
实施结果:
美元的时间格式是:2012-06-23 03:30:31
替换格式为:03, 30,31秒,06个月,2012。
阵列
(
{ 0 } = > 2012-06-23 03:30:31
{ 1 } = 2012
{ 2 } = 06
{ 3 } = 23
{ 4 } = 03
{ 5 } = 30
{ 6 } = 31
)