我有这个代码:
<?php
$array = array();
$test = 'this is a #test';
$regex = "#(\#.+)#";
$test = preg_replace($regex, '<strong>$1</strong>', $test);
echo $test;
?>
我想做:$array[] = $1
请问有人有什么建议吗?
如果您使用 PHP ≥ 5.3.0,您可以使用匿名函数和preg_replace_callback
. 首先是回调:
$array = array();
$callback = function ($match) use (&$array) {
$array[] = $match[1];
return '<strong>'.$match[1].'</strong>';
};
$input = 'this is a #test';
$regex = '/(#.*)/';
$output = preg_replace_callback($regex, $callback, $input);
echo "Result string:\n", $output, "\n";
echo "Result array:\n";
print_r($array);
结果是:
Result string:
this is a <strong>#test</strong>
Result array:
Array
(
[0] => #test
)
在 PHP 5.3.0 之前,您只能使用create_function
或在代码中其他地方定义的任何函数。他们都不能访问$array
定义在父作用域中的局部变量$callback
。在这种情况下,您要么必须为$array
(呃!)使用全局变量,要么在类中定义函数并创建该类$array
的成员。
在 PHP 4 >= 4.0.5、PHP 5 中,使用preg_replace_callback和global
变量。
$array = array();
$input = 'this is a #test';
$regex = '/(#\w*)/';
$output = preg_replace_callback(
$regex,
create_function(
'$match', 'global $array;
$array[] = $match[1]; return "<strong>" . $match[1] . "</strong>";'),
$input);
echo "Result string:\n", $output, "\n\n";
echo "Result array:\n";
print_r($array);
Result string:
this is a <strong>#test</strong>
Result array:
Array
(
[0] => #test
)
点击这里。
您可以使用:
preg_match($regex, $test, $matches);
$my_array = $matches[1];