2

我有这个代码:

<?php
$array = array();
$test = 'this is a #test';
$regex = "#(\#.+)#";
$test = preg_replace($regex, '<strong>$1</strong>', $test);
echo $test;
?>

我想做:$array[] = $1

请问有人有什么建议吗?

4

3 回答 3

2

如果您使用 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的成员。

于 2012-11-10T13:33:16.453 回答
1

在 PHP 4 >= 4.0.5、PHP 5 中,使用preg_replace_callbackglobal变量。

PHP代码:

$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
)

演示:

点击这里

于 2012-11-10T14:21:05.863 回答
0

您可以使用:

preg_match($regex, $test, $matches);
$my_array = $matches[1];
于 2012-11-10T11:56:29.663 回答