preg_replace 問題の解決策
別の文字列があります:
$html = '
- 《mainGood》
- 《subGood》《subGood》
';//「mainGood」と「subGood」の数は不確かです
今は echo preg_replace("/(《mainGood》)|(《subGood》)/is", callback function, $html);
当初、コールバック関数メソッドを使用して、「mainGood」を 1、最初の「subGood」を 2、3 番目の「subGood」を 3 などに置き換えたかったのです。コールバック関数は現在の置換番号を取得し、置換内容を決定します。しかし、コールバック関数での書き方がわかりません。教えてください。
-----解決策---------
ということですか?
PHP コード
<?php
$html = '<ul><li>《mainGood》《mainGood》</li><li>《subGood》《subGood》《subGood》</li></ul>';
echo preg_replace("/(《mainGood》|《subGood》)/eis","foo('$1')",$html);
関数 foo($v){
グローバル $count;
if($v=='《メイングッド》'){
1を返します。
}それ以外{
$count++;
$count+1 を返します。
}
}
//
------解決策------------------
$num_mainGood = $num_subGood = 0;
echo preg_replace_callback("/(《mainGood》)|(《subGood》)/is", 'コールバック関数', $html);
関数コールバック関数( $r) {
global $num_mainGood, $num_subGood;
if($r[1]) $num_mainGood++;
if($r[2]) $num_subGood++;
// 以下のように記述し、 return コンテンツコード
}
------解決策------------------
PHP コード
[liangdong@bb-browser-test00.vm.baidu.com php_project]$ php main.php
[liangdong@bb-browser-test00.vm.baidu.com php_project]$ cat main.php
《メイングッド》《サブグッド》《サブグッド》
EOF;
$count = 0;
$map = array(0 => 'a', 1 => 'b', 2 => 'c');
$result = preg_replace_callback('/《メイングッド》|《サブグッド》/i',
関数($match) {
グローバル $count;
グローバル $マップ;
$map[$count++] を返します;
}, $html);
echo $result .PHP_EOL;
?>