首頁 後端開發 php教程 php中用正则匹配多个结果,随机替换其中一个结果_PHP教程

php中用正则匹配多个结果,随机替换其中一个结果_PHP教程

Jul 14, 2016 am 10:09 AM
php 使用 匹配 多個 字元 替換 正規則 簡單 結果 隨機

用正则匹配字符,如果是全部替换很简单,使用preg_replace就可以了。但是我现在要对得到的多个匹配成功的结果,随机替换其中的一个,这个就有点麻烦了。自己写了个函数解决,不知道有没有其它更好的方法。例子 “I have a dream. I have a dream. I have a dream. I have a dream.”  匹配式 '/i/'。 上面的字符串中有4个匹配结果,我只要随机替换其中的一个。i替换成hell.

我的代码如下:
 
[php]  
//正则处理函数  
function rand_replace_callback($matches) {  
    global $g_rand_replace_num, $g_rand_replace_index, $g_rand_replace_str;  
    $g_rand_replace_index++;  
    if($g_rand_replace_num==$g_rand_replace_index){  
        return $g_rand_replace_str;  
    }else {  
        return $matches[0];  
      }          
}  
  
//随机正则替换函数  如果有多个匹配的单元,随机替换其中的一个。   
//注意global $g_rand_replace_num, $g_rand_replace_index, $g_rand_replace_str;这三个全局变量,不要与其它的冲突  
//依赖一个正则处理函数 记录匹配单元总数,取一个总数范围内的随机值,在正则处理函数中判断相等则处理。  
function rand_preg_replace($pattern, $t_g_rand_replace_str, $string)  
{  
    global $g_rand_replace_num, $g_rand_replace_index, $g_rand_replace_str;  
    preg_match_all($pattern, $string, $out);$find_count = count($out[0]);  //匹配的单元总数  
    $g_rand_replace_num = mt_rand(1, $find_count);  //符合正则搜索条件的集合  
    $g_rand_replace_index = 0;  //实际替换过程中的index  
    $g_rand_replace_str = $t_g_rand_replace_str;  
    echo "现在找到符合的有{$find_count}个
";  
    $ss=preg_replace_callback($pattern,"rand_replace_callback",$string);  
    return $ss;  www.2cto.com
}  
  
$string = "I have a dream. I have a dream. I have a dream. I have a dream.";  
echo rand_preg_replace('/I/', "hell", $string);  
 
 
 
扩展思考,我想减低第一个结果被替换的概念怎么办呢? 有些情况,第一个被替换不是很好,只需要少量的结果是第一个被替换。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477700.htmlTechArticle用正则匹配字符,如果是全部替换很简单,使用preg_replace就可以了。但是我现在要对得到的多个匹配成功的结果,随机替换其中的一个,这...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles