我一直在研究这个半小时但仍然无法弄明白。我相信这很简单。
我想匹配一个id,但前面只有“ID:”。
<?php
$string1 = "Payment: 1474";
$string2 = "Payment ID: 1474";
preg_match('/ID: ([0-9]){1,7}$/', $string1, $matches);
//array(0){} Good! This is the expected result.
preg_match('/ID: ([0-9]){1,7}$/', $string2, $matches);
//array(2) { [0]=> string(8) "ID: 1474" [1]=> string(1) "4" }
//I am glad it finds a match, but I want matches[0] to be only the id, 1474
?>
换句话说,我需要找到一个匹配但我还需要指定进入数组的内容。
由于我在学习这个问题时遇到了麻烦,如果您不仅仅回答代码而且还要解释它的作用,我将不胜感激。谢谢!
答案 0 :(得分:5)
试试这个:
preg_match('/ID: ([0-9]{1,7})$/', $string2, $matches);
在您的代码中,捕获组只匹配一个字符。这匹配捕获组内的1-7个数字。
答案 1 :(得分:0)
括号捕获匹配表达式的一部分并将其存储在$ matches [1]中。这是获得您想要的最佳方式。只需将关闭的paren移动到{1,7}
部分的右侧:
preg_match("/ID: (\d{1,7})/", $string2, $matches);
$id = $matches[1];
答案 2 :(得分:0)
为了论证:
preg_match('/(?<=ID: )[0-9]{1,7}$/', $string2, $matches);
((?<=)
是一个外观操作员,它只查看匹配是否在此之前,但它实际上并不是结果匹配的一部分。但是我很难想到它为什么有正当理由位于0
'索引中....只需说出$id=$matches[1]
,你就有了数据吗?