Можно ли изменить подобные элементы с помощью php? - PullRequest
0 голосов
/ 11 августа 2011

Например, у меня есть что-то вроде этого:

<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 ]

3 голосов
/ 11 августа 2011

Если нет вложенных тегов <i>, это поможет:

Введите регулярное выражение: <i id=".*?">(.*?)</i>

Замена: <b>\1</b>

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

Не проверено, но оно должно работать.

0 голосов
/ 11 августа 2011

Это рекурсивное регулярное выражение работает с любыми уровнями вложенности:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...