我有一个潜在的非常大的提交类型输入按钮列表,这些按钮名为 delete0
、delete1
、delete2
等,我正在尝试使用 preg_match
来匹配$_POST
数组中单击的按钮并梳理出附加的数字,以便我可以从 mysql 表中删除该数字。
问题是我的preg_match
并没有在看起来应该的时候表现得贪婪。例如,如果我使用按钮提交 delete13
,我将获得delete1
的匹配项,delete23
将获得delete2
的匹配项,等等。
以下是我的模式和逻辑:
$pattern = "/,?(delete)('d)+,?/";
$allpostkeys = implode(",", array_keys($_POST));
echo "<br />" . $allpostkeys . "<br />";
if (preg_match($pattern, $allpostkeys, $matches))
{
echo "<br />You elected to delete row: " . $matches[2];
$rowToDelete = $matches[2];
}
更改
$pattern = "/,?(delete)('d)+,?/";
到
$pattern = "/,?(delete)('d+),?/";
小修复:
/,?(delete)('d+),?/
您正在捕获正在重复的模式:('d)+
,因此捕获组中只应保留上次重复的子字符串(单个数字)。 ('d+)
将捕获子字符串,其中包含所有重复的数字。
作为进一步的改进,第一个捕获组不是必需的:
/,?delete('d)+,?/
所以你可以用matches[1]
来指delete
后的数字