使用数组数据时preg_replace简单文本

时间:2013-02-02 22:02:20

标签: php preg-replace

我们只想说我有一个简单的文字:

  

测试测试测试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三星移动美国 -   埃尔柏拉图至尊更多文字等

任何帮助都会很棒。

2 个答案:

答案 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);

http://php.net/manual/en/function.preg-replace.php