Обрезать регулярные выражения или пробел preg_replace, включая вкладки и новые строки - PullRequest
1 голос
/ 03 февраля 2012

Как я могу использовать 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>

Спасибо

Редактировать: Извините, я должен объяснить, что все вышеперечисленное в строке

Ответы [ 5 ]

4 голосов
/ 03 февраля 2012
$str = trim($str, "\t\n");

См. отделка

3 голосов
/ 03 февраля 2012

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

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

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

1 голос
/ 03 февраля 2012

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

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

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

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


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

(?|^(<code><div class="b-line"></div>)\s+|\s+(</code>)$)
0 голосов
/ 03 февраля 2012

Я думаю, что это регулярное выражение на основе 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>"
0 голосов
/ 03 февраля 2012

@ Ответ Виктора почти правильный. Если вы просто наберете 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);      
  ?>
...