【发布时间】:2017-04-25 05:31:09
【问题描述】:
我试图弄清楚如何识别匹配的正则表达式组的出现顺序。但找不到任何此类功能。然而,我确信它必须在那里,我只是做错了什么......
到目前为止,我有这个:
$string = "SELECT id, title FROM table WHERE id = ?d AND qwe=?s";
$pattern = '/(\?+[sdf]{1})/i';
$data = array(111, 222, 333);
$inc = 0;
function callback($matches) {
global $inc, $data;
$inc++;
switch ($matches[0]) {
case '?s':
return '`'.$data[$inc].'`';
case '?d':
return (int) $data[$inc];
case '?f':
return (double) $data[$inc];
}
}
print_r(preg_replace_callback($pattern, 'callback', $string));
它有效,但是 $inc 的那个东西肯定不是要走的路......
我想在这里完全避免使用 $inc。当这些正则表达式组匹配时,有没有办法知道出现的顺序?这就是我想要做的。所以,也许我不仅会有匹配项,还有一个数字会告诉我这是按顺序排列的匹配项。
这个问题有更好的解决方案吗?
【问题讨论】:
-
您的代码工作正常吗?我的代码有错误。
-
是的,它正在工作。我在这里复制代码时忘记了一件事。我现在修好了。你能再试一次吗?
-
如果我的回答有帮助,也请考虑点赞。