在preg函数中保存一个值

时间:2012-11-10 11:47:45

标签: php regex

我有这段代码:

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

我想做:$array[] = $1

有人有建议吗?

3 个答案:

答案 0 :(得分:2)

如果您使用PHP≥5.3.0,则可以使用anonymous functionpreg_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_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
)

演示:

点击 here

答案 2 :(得分:0)

您可以使用:

preg_match($regex, $test, $matches);
$my_array = $matches[1];