求一正则写法 本帖最后由 evila 于 2012-04-20 02:27:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $str = '<AAA:BBB id="20" size="large" />';preg_match_all('/[:"](\w+)/i', $str, $reg);print_r($reg[1]);Array( [0] => BBB [1] => 20 [2] => large) 你好,为什么我使用preg_replace_callback 函数用这个规则写得到的数据和你测试的一样,用preg_match_all 就是正常的 上面打错字了,这CSDN又不能编辑应该是为什么我使用preg_replace_callback 函数用这个规则写得到的数据和你测试的不一样,用preg_match_all 就是正常的 $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归我所有</div>';$s = preg_replace_callback('/[:"](\w+)/i','callbackfunc',$s);function callbackfunc($arr){ return print_r($arr[1]);} 把文本里所有匹配的标签改成我函数里处理过后的字符串function callbackfunc($arr){ $ret = '编号:'.$arr[1][1]; $ret .= '大小:'.$arr[1][2]; return $ret}如果用print_r直接打印好像没有问题,但是我这样做,就有引号 $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归我所有</div>';echo $s = preg_replace_callback('/[:"](\w+)"?/i','callbackfunc',$s);function callbackfunc($arr){ $ret = '编号:'.$arr[1]; $ret .= '大小:'.$arr[1]; return $ret;}<h2>请投票</h2><de编号:test大小:test id=编号:3大小:3 size=编号:small大小:small /><div>本投票最终解释权归我所有</div> 你这样明显是没有经过测试的,你看callbackfunc这个函数,编号 和大小 都是 $arr[1]…… 如果未经测试,我不会给出结果串!preg_replace_callback 传给回调函数的只是一个一维数组,不存在你 #9 的数组元素你示例的串与提出的问题及期望的结果明显不符让人无所适从 preg_replace_callback/preg_replace默认就是all,也就是limit==-1。callback的返回值将作为一个整体替代//匹配的内容,楼主是不是理解有误http://jp.php.net/preg_replace_callback 从一串字符中用正则提取进来进行处理,这很难人让人理解吗?如果我说的字符串是:$str = '<AAA:BBB id="20" size="large" />'; 就非得是这样子?不能是$s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归aaa所有</div>';这应该不算是变化吧?如果我没有运行,我怎么敢乱否定的意见<?phpfunction callbackfunc($arr){ $data = $arr[1]; print_r($arr[1]);}$s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归所有</div>';preg_replace_callback('/[:"](\w+)"?/i','callbackfunc',$s);?>运行结果是:test3small,就是字符串,非数组。 你就把想得到的结果贴出来吧 比如 $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归aaa所有</div>';你想把上面变成什么??.... 我就在那回调函数里获得到这三个值:test 3 samll 不知道我有没有说清楚。 你是想在callbackfunc里面获取 包含test、3、samll 三个结果的一个数组么?preg_replace_callback用类似循环的方式 每次向回调函数传入当前匹配的一个内容,不会将三个匹配一次传进去在这里你可能用错函数了,还是将最终需求给出来吧? mysql查询类 想用PHP+jquer实现产品的对比功能 求助! class调用问题 mysql 查询语句应该如何写 php 数据能够获取 但无法写入数据库 同一文件另一个表可能写入 给大家一个购物车类,看看还需要什么改进 表单相关的问题 怎样转float为字符串呢?(VC) if内如果是函数,函数就自己执行了? 请教个PHP-安卓开发问题 文件上传在$.ajax post提交的方式下面 $_FILES取不到信息
preg_match_all('/[:"](\w+)/i', $str, $reg);
print_r($reg[1]);Array
(
[0] => BBB
[1] => 20
[2] => large
)
你好,为什么我使用preg_replace_callback 函数用这个规则写得到的数据和你测试的一样,用preg_match_all 就是正常的
$s = preg_replace_callback('/[:"](\w+)/i','callbackfunc',$s);function callbackfunc($arr)
{
return print_r($arr[1]);
}
{
$ret = '编号:'.$arr[1][1];
$ret .= '大小:'.$arr[1][2]; return $ret
}如果用print_r直接打印好像没有问题,但是我这样做,就有引号
echo $s = preg_replace_callback('/[:"](\w+)"?/i','callbackfunc',$s);function callbackfunc($arr)
{
$ret = '编号:'.$arr[1];
$ret .= '大小:'.$arr[1]; return $ret;
}
<h2>请投票</h2><de编号:test大小:test id=编号:3大小:3 size=编号:small大小:small /><div>本投票最终解释权归我所有</div>
你这样明显是没有经过测试的,你看callbackfunc这个函数,编号 和大小 都是 $arr[1]……
让人无所适从
$str = '<AAA:BBB id="20" size="large" />'; 就非得是这样子?不能是
$s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归aaa所有</div>';这应该不算是变化吧?如果我没有运行,我怎么敢乱否定的意见
<?php
function callbackfunc($arr)
{
$data = $arr[1]; print_r($arr[1]);
}$s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归所有</div>';preg_replace_callback('/[:"](\w+)"?/i','callbackfunc',$s);?>
运行结果是:test3small,就是字符串,非数组。
比如 $s = '<h2>请投票</h2><de:test id="3" size="small" /><div>本投票最终解释权归aaa所有</div>';
你想把上面变成什么??
....
我就在那回调函数里获得到这三个值:test 3 samll
不知道我有没有说清楚。
preg_replace_callback用类似循环的方式 每次向回调函数传入当前匹配的一个内容,不会将三个匹配一次传进去
在这里你可能用错函数了,还是将最终需求给出来吧?