0

我有一个可能非常大的提交类型输入按钮列表,这些按钮名为delete0,等delete1delete2我试图用它preg_match来匹配数组中单击的按钮$_POST并梳理出附加的数字,这样我就可以从一个mysql表。

问题是我preg_match的行为似乎并不贪婪。例如,如果我使用 button 提交delete13,我将得到一个匹配项delete1delete23我得到一个匹配项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];
}
4

2 回答 2

0

小修复:

/,?(delete)(\d+),?/

您正在捕获正在重复的模式:(\d)+,因此只有最后一次重复的子字符串应该留在捕获组中(单个数字)。(\d+)将捕获包含所有重复数字的子字符串。

作为进一步的改进,第一个捕获组不是必需的:

/,?delete(\d)+,?/

所以你可以参考后面的delete数字matches[1]

于 2013-01-27T08:58:14.493 回答
0

改变

$pattern = "/,?(delete)(\d)+,?/";

进入

$pattern = "/,?(delete)(\d+),?/";
于 2013-01-27T09:00:13.600 回答