Как я могу использовать 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>
Я думаю, что это регулярное выражение 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); ?>