Игнорировать пустое совпадение php Regex

Мне нужно заменить весь текст внутри тега (который не является кодом).
Итак, я использую:

preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)

И я получаю результат. Но мне нужно удалить все пустые и только пробельные совпадения или исключить их из поиска.
Как мне это сделать?

1

Решение

Я хотел бы предложить что-то вроде этого:

<.*?>((?=[^<]*\S.*?<)([^<]+))<\/.*?>

или, если вы хотите включить новые строки в ваш матч:

(<.*?>)(?=[^<]*\S.*[<\n])([^<]+)(<\/.*?>)

Вот демо

Это похоже на ваш awnser в замене вашей подходящей группы [^<]+ чтобы убедиться, что хотя бы один символ возвращается

Тем не менее, чтобы убедиться, что только строки с пробелами не будут сопоставлены, после сопоставления с открывающим тегом добавляется предварительный просмотр:

(?=[^<]*\S.*?<)

Это гарантирует, что между двумя тегами есть хотя бы один символ, который не является пробелом.

больше информации о перспективах

1

Другие решения

До:

preg_replace('/<.*?>([^<]*)<\/.*?>/', "new_text", $str)

После:

Use +: preg_replace('/<.*?>([^<]+)<\/.*?>/', "new_text", $str)
0

По вопросам рекламы [email protected]