php中用正则匹配多个结果,随机替换其中一个结果
2013-03-04 15:33
288 查看
用正则匹配字符,如果是全部替换很简单,使用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_replace_str = $t_g_rand_replace_str; echo "现在找到符合的有{$find_count}个<br>"; $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);
扩展思考,我想减低第一个结果被替换的概念怎么办呢? 有些情况,第一个被替换不是很好,只需要少量的结果是第一个被替换。
相关文章推荐
- PHP 字符串函数--替换、正则匹配等
- 通过PHP自带的服务器来查看正则匹配结果的方法
- 通过PHP自带的服务器来查看正则匹配结果的方法
- PHP正则表达式匹配替换与分割功能实例浅析
- php正则匹配html中的带class的div,选取其中的内容
- 编程产生一个int数组,长度为30,并向其中随机插入1-30,并且不能重复输出数组。实现一个冒泡排序算法对其进行排序,输出排序结果
- php中的正则函数主要有三个-正则匹配,正则替换
- php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.
- PHP正则匹配与替换的简单例子
- php preg_filter执行一个正则表达式搜索和替换
- PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。
- java中正则匹配结果到一个String数组中
- PHP正则匹配替换图片地址
- 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。按照数组下标输出结果。
- 返回单个匹配结果 正则(PHP代码函数)
- php preg_filter执行一个正则表达式搜索和替换
- 返回所有匹配结果 正则(PHP代码函数)
- php正则的使用[替换,匹配]
- php正则动态匹配 - 替代str_replace的数组替换
- 将字符串 “ hello word,你 好 世 界 ! ” 两端空格去掉并且将其中的其他所有空格替换成一个空格 输出结果为“hello word,你 好 世界”