是否可以使用PHP更改类似的项目?

时间:2011-08-11 08:58:57

标签: php replace

例如,我有这样的事情:

<i id="text">text</i><br><i>text2</i>

我希望将其更改为:

<b>text</b><br><i>text2</i>

所以它会保留<i>text2</i>

但将<i id="text">text</i>更改为<b>text</b>

甚至可能吗?

2 个答案:

答案 0 :(得分:3)

假设没有嵌套的<i>标签,这应该可以解决问题:

输入正则表达式:<i id=".*?">(.*?)</i>

替换:<b>\1</b>

$output = preg_replace('/<i id=".*?">(.*?)<\/i>/i', '<b>\1</b>', $input);

未经测试,但它应该有效。

答案 1 :(得分:0)

这个递归正则表达式适用于任何级别的嵌套:

function regReplace( $str ) {
    return preg_replace_callback( '/<i id="text">(.*?(?R)*)<\/i>/is', 'replaceTags', $str );
}

function replaceTags( $matches ) {
    return '<b>'.regReplace( $matches[1] ).'</b>';
}

var_dump( regReplace( '<i id="text">text <i id="text">text <i id="text">text</i></i></i><br><i>text2</i>' ) );

结果:

<b>text <b>text <b>text</b></b></b><br><i>text2</i>