我们只想说我有一个简单的文字:
测试测试测试http://www.youtube.com/watch?v=pzfAdmAtYIY 更多测试和随机文本 http://www.youtube.com/watch?v=UZQ_RDb0lcE更多文字等
我也有简单的数组:
$arr = array('Samsung Mobile USA - El Plato Supreme', 'SET FIRE | DUBSTEP');
如何实现这一目标:
测试测试测试pzfAdmAtYIY Samsung Mobile USA - El Plato 至尊更多测试和随机文本UZQ_RDb0lcE SET FIRE | DUBSTEP 更多文字等
我的尝试:
$count = 0;
$text = 'testing testing testing http://www.youtube.com/watch?v=pzfAdmAtYIY more testing and random text http://www.youtube.com/watch?v=UZQ_RDb0lcE more text etc';
$arr = array('Samsung Mobile USA - El Plato Supreme', 'SET FIRE | DUBSTEP');
$string = preg_replace('/http:\/\/www.youtube.com\/watch\?v=([a-zA-Z0-9_-]*)/ms', ' \\1 '. $arr[$count++].'', $text);
print $string;
不幸的是结果:
测试测试测试pzfAdmAtYIY Samsung Mobile USA - El Plato 至尊更多测试和随机文本UZQ_RDb0lcE三星移动美国 - 埃尔柏拉图至尊更多文字等
任何帮助都会很棒。
答案 0 :(得分:2)
您可以使用preg_replace_callback执行此类操作:
$str = 'testing testing testing http://www.youtube.com/watch?v=pzfAdmAtYIY more testing and random text http://www.youtube.com/watch?v=UZQ_RDb0lcE more text etc';
// either like this:
// $arr = array('Samsung Mobile USA - El Plato Supreme', 'SET FIRE | DUBSTEP');
// or via $GLOBALS array
$GLOBALS['arr'] = array('Samsung Mobile USA - El Plato Supreme', 'SET FIRE | DUBSTEP');
$str = preg_replace_callback('/http:\/\/www.youtube.com\/watch\?v=([a-zA-Z0-9_-]*)/ms', function($match) {
// this is called for each match of the expression
// sets a counter
static $count = 0;
// making $arr a global variable
// global $arr;
// the return value
// $r = $arr[$count];
// or in case it is in the $GLOBALS
$r = $GLOBALS['arr'][$count];
// increase the counter
$count++;
// and return
return $r;
}, $str);
echo $str;
答案 1 :(得分:0)
preg_replace():第二个参数必须是替换数组,因为您的示例遵循以下规则:“如果此参数是字符串且模式参数是数组,则所有模式都将被该字符串替换”。
还要注意正则表达式中的点:它们必须被转义。
结果:$ string = preg_replace('regex',$ arr,$ text);