我有这段代码:
<?php
$array = array();
$test = 'this is a #test';
$regex = "#(\#.+)#";
$test = preg_replace($regex, '<strong>$1</strong>', $test);
echo $test;
?>
我想做:$array[] = $1
有人有建议吗?
答案 0 :(得分:2)
如果您使用PHP≥5.3.0,则可以使用anonymous function和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
成为该类的成员。
答案 1 :(得分:1)
在PHP 4&gt; = 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
)
点击 here 。
答案 2 :(得分:0)
您可以使用:
preg_match($regex, $test, $matches);
$my_array = $matches[1];