私はこのコードを持っています:
<?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];