Регулярное выравнивание или preg_replace пробел, включая вкладки и новые строки

Как я могу использовать PHP, чтобы обрезать все пустое пространство до «poo» и все пробелы после?

Я хотел бы сделать следующее:

<code><div class="b-line"></div> \t \n\n\n \t \n poo <lol> n \n \n \t </code> 

В этом:

 <code><div class="b-line"></div>poo <lol> n</code> 

Эта часть всегда будет в начале строки: <code><div class="b-line"></div>

благодаря

Редактировать: Извините, я должен объяснить, что все это в строке, и я хочу только обрезать пробел сразу после <code><div class="b-line"></div> и непосредственно перед </code>

Solutions Collecting From Web of "Регулярное выравнивание или preg_replace пробел, включая вкладки и новые строки"

Я думаю, что это регулярное выражение lookahead и lookbehind будет работать для вас:

 $str = <<< EOF <code><div class="b-line"></div> \t \n\n\n \t \n poo <lol> n \n \n \t </code> EOF; $str = preg_replace_callback('#(?<=<code><div class="b-line"></div>)(.*?)(\s*<[^>]*>\s*)(.*?)(?=</code>)#is', create_function('$m', 'return str_replace(array("\n", "\t", " "), "", $m[1]).$m[2].str_replace(array("\n", "\t", " "), "", $m[3]);'), $str); var_dump ( $str ); 

ВЫВОД:

 string(51) "<code><div class="b-line"></div>poo <lol> n</code>" 
 $str = trim($str, "\t\n"); 

См. Отделку

preg_* функции обеспечивает preg_* последовательность escape-последовательности \s , которую вы можете использовать, поэтому вы будете регулярным выражением:

 $regexp = '~...>\\s*([^<]*?)\\s*<~m' 

Возможно, вам нужно будет использовать [\\s$] вместо просто \\s , я не уверен, как PCRE обрабатывает символы новой строки в этих случаях.

Я хочу только обрезать пробел сразу после <code><div class="b-line"></div> и непосредственно перед </code>

Можно сделать с помощью:

 preg_replace(',(?|(<code><div class="b-line"></div>)\s+|\s+(</code>)),', '$1', $str); 

Пример здесь .


Если <code> встречается только в начале / конце строки, вы хотели бы привязать выражение с помощью ^ и $ :

 (?|^(<code><div class="b-line"></div>)\s+|\s+(</code>)$) 

Ответ Витака почти прав. Если вы просто запустите echo preg_replace('/\s/', '', $s); против вашей строки (которая равна $s ), вы получите:

 <code><divclass="b-line"></div>poo<lol>n</code> 

Тестовый фрагмент:

  <?php $s = <<<EOF <code><div class="b-line"></div> poo <lol> n </code> EOF; echo preg_replace('/\s/', '', $s); ?>