例如,我有这样的事情:
<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>
甚至可能吗?
答案 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>