php用正则表达式替换substring

时间:2012-03-13 14:13:08

标签: php regex html-parsing

好的,我知道有数以万计的类似问题,但我发现很难实现这一点。 我有一些这种格式的字符串:

$x = '<iframe src="[File:19]"></iframe>';
$y = '<img src=[File:2212] />';
$z = '<source src="[File:42]" />';

我正在尝试在File:之后获取ID,并用另一个字符串替换整个[File:xxx]。我正在尝试以下内容,但似乎我无法完全理解preg_replace的用法。

$file = ('<iframe src="[File:134]"></frame>');
$rex = "/^.*(\[File:[0-9]{1,}\])/i" ;
if ( preg_match($rex, $file, $match) ) {
    echo 'OK';
}
$file = preg_replace ($rex, "http://lala.com/la.pdf", $file);
echo "<br>".htmlentities($file)."<br>";

你能否告诉我一些关于如何做到这一点的提示?

提前致谢。

3 个答案:

答案 0 :(得分:1)

更改这两行

$rex = "/^.*(\[File:[0-9]{1,}\])/i" ;

$file = preg_replace ($rex, "http://lala.com/la.pdf", $file);

为:

$rex = "/^(.*)\[File:[0-9]{1,}\]/i" ;

$file = preg_replace ($rex, "$1http://lala.com/la.pdf", $file);

这会将[File...]之前的内容捕获到第1组,然后在替换部分中,将此组(即$1)添加到替换字符串前面。

可以改写为:

$rex = "/\[File:\d+\]/i" ;

$file = preg_replace ($rex, "http://lala.com/la.pdf", $file);

答案 1 :(得分:1)

这应该可以解决问题:

preg_match('/\[File:(\d+)\]/i', $str, $match)

$ match [0]将包含整个字符串,$ match [1]将只包含该数字 正则表达式匹配后,您可以使用str_replace从字符串中删除$ match [0]。

示例:

$x = '<iframe src="[File:19]"></iframe>';
preg_match('/\[File:(\d+)\]/i', $x, $match);
var_dump($match);

给出:

array(2) {
  [0]=>
  string(9) "[File:19]"
  [1]=>
  string(2) "19"
}

答案 2 :(得分:1)

这应该有效:

<?php
$formats[] = '<iframe src="[File:19]"></iframe>';
$formats[] = '<img src=[File:2212] />';
$formats[] = '<source src="[File:42]" />';


foreach( $formats as $format ) {

    $regex = '~\[File:(\d+)\]~';

    $replace = function( $matches ) {
        return 'http://lala.com/la.pdf?id=' . $matches[1];
    };

    var_dump( preg_replace_callback( $regex, $replace, $format ) );
}

我为替换创建了一个lambda,因为我觉得你想在File:之后使用id而不是丢弃它。玩得开心。如果您有任何疑问,请告诉我们。