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_callbackを使用しglobalます。

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 に答える