2016-06-14 4 views
1

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

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

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

+0

Использование '+':! 'Preg_replace ('/ <.*?> ([^ <]+)<\/.*?> /', "new_text", $ строка)' –

+0

@Wiktor Stribiżew Да Спасибо – Killumi

+0

Использование '+' будет –

ответ

1

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

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

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

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

Here's a demo

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

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

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

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

more info on lookaheads

+0

Подскажите, пожалуйста, что я могу добавить, чтобы выделить текст [этого типа] (http://regexr.com/3dkha)? – Killumi

+0

Вот оно '(? = [^ <] * \ S \ s *? <) '? – Killumi

+0

Но мне нужен только текст (без вкладок и пробелов) – Killumi

0

Before:

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

After:

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