• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-24) 14次浏览 已收录 0个评论

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

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

我的代码如下:

//正则处理函数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<strong>*本文来@源gao@daima#com搞(%代@#码@网2</strong><pre>搞代gaodaima码

_replace_str = $t_g_rand_replace_str; echo “现在找到符合的有{$find_count}个
“; $ss=preg_replace_callback($pattern,”rand_replace_callback”,$string); return $ss;}$string = “I have a dream. I have a dream. I have a dream. I have a dream.”;echo rand_preg_replace(‘/I/’, “hell”, $string);

扩展思考,我想减低第一个结果被替换的概念怎么办呢? 有些情况,第一个被替换不是很好,只需要少量的结果是第一个被替换。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php顶用正则匹配多个结果,随机替换其中一个结果
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址