ホームページ >バックエンド開発 >PHPチュートリアル >preg_replace に関連する問題の解決

preg_replace に関連する問題の解決

WBOY
WBOYオリジナル
2016-06-13 13:13:56933ブラウズ

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 を返します。
    }
}
//
  • 11
  • 234

------解決策------------------
$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
  • a
  • bc
[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; ?>
    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。