Используйте PHP для удаления 1-го <p> и последнего </ p> только в строке

1

Я нашел несколько решений preg_replace для этой проблемы, ближайший из них:

$string = preg_replace('/<p[^>]*>(.*)<\/p[^>]*>/i', '$1', $string);

Тем не менее, это разделяет теги ALL <p> & </p>. Как отрегулировать это, чтобы ТОЛЬКО отделить теги FIRST <p> и LAST </p>, даже если другие теги расположены в другом месте моей строки?

Большое спасибо!

  • 1
    Не используйте регулярные выражения для обработки HTML: stackoverflow.com/questions/1732348/…
  • 0
    stackoverflow.com/questions/3835636/… применимо, если вы редактируете его
Показать ещё 2 комментария
Теги:
preg-replace

2 ответа

1
Лучший ответ

Используйте дополнительный параметр как 1. См. Этот пост. Использование str_replace так, чтобы оно действовало только в первом матче?

Для последнего p-тега используйте поиск позади. Или вы можете отменить поиск строк и заменить его с начала. Не забудьте изменить регулярное выражение соответственно.

Первым регулярным выражением Ur может быть такое

$str=preg_replace('/<p>/', '', $str,1);

Теперь измените строку и сделайте то же самое, но измените regex.

$str=strrev ($str);

$str=preg_replace('/>p\/</', '', $str,1);

Теперь снова измените строку

$str=strrev ($str);
0

Учитывая, что для понимания кода потребуется много времени, я бы просто использовал str_replace в соответствии с этими обсуждениями:

Использование str_replace так, чтобы оно действовало только в первом матче?

PHP Замените последнее вхождение строки в строку?

Итак, что-то вроде:

// Remove first occurrence of '<p>'
$pos = strpos( $string, '<p> );
if( $pos !== false ){
    $string = substr_replace( $string, '<p>', $pos, 3 );
}
// Remove last occurrence of '<p>'
$pos = strrpos( $string, '</p>' );
if( $pos !== false ){
    $string = substr_replace( $string, '</p>', $pos, 3 );
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню