使用
\/Date\((\d{10})(\d{3})([\+\-]\d{4})?\)\/
在
/Date(1425556377427+0100)/
preg_match
的结果是
array(
0 => /Date(1425556377427+0100)/
1 => 1425556377
2 => 427
3 => +0100
)
是否可以更改正则表达式,使其与第一个匹配的整个字符串不匹配?
修改
只是为了澄清(因为这是-1来自的地方)。正则表达式在preg_replace_callback
中使用,因此整个匹配将传递给提供的回调。这就是为什么我想尽可能干净地传递它。
答案 0 :(得分:1)
是的,可以使用前瞻性正则表达式来避免匹配完整的字符串,例如:
~(?=/Date\((\d{10})(\d{3})([+-]\d{4})?\)/)~
<强>代码:强>
preg_match('~(?=/Date\((\d{10})(\d{3})([+-]\d{4})?\)/)~',
'/Date(1425556377427+0100)/', $m);
unset($m[0]);
print_r($m);
Array
(
[1] => 1425556377
[2] => 427
[3] => +0100
)
答案 1 :(得分:1)
不,只是改变表达式是不可能的。 原因是,正如PHP文档所说:
$matches[0]
将包含与完整模式匹配的文字
答案 2 :(得分:0)
您可以使用此模式:
$pattern = '~/Date\(\K\d{10}(?=(\d{3})([-+]\d{4})\)/)~';
\K
从匹配结果中删除左侧的所有内容。
(?=..)
是一个前瞻,不是匹配结果的一部分(它的零宽度断言)
这个想法是使用十位数作为整个匹配结果。