Я нашел несколько решений preg_replace для этой проблемы, ближайший из них:
$string = preg_replace('/<p[^>]*>(.*)<\/p[^>]*>/i', '$1', $string);
Тем не менее, это разделяет теги ALL <p>
& </p>
. Как отрегулировать это, чтобы ТОЛЬКО отделить теги FIRST <p>
и LAST </p>
, даже если другие теги расположены в другом месте моей строки?
Большое спасибо!
Используйте дополнительный параметр как 1. См. Этот пост. Использование str_replace так, чтобы оно действовало только в первом матче?
Для последнего p-тега используйте поиск позади. Или вы можете отменить поиск строк и заменить его с начала. Не забудьте изменить регулярное выражение соответственно.
Первым регулярным выражением Ur может быть такое
$str=preg_replace('/<p>/', '', $str,1);
Теперь измените строку и сделайте то же самое, но измените regex.
$str=strrev ($str);
$str=preg_replace('/>p\/</', '', $str,1);
Теперь снова измените строку
$str=strrev ($str);
Учитывая, что для понимания кода потребуется много времени, я бы просто использовал 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 );
}