正则表达式修剪或preg_replace空白区域,包括制表符和新行

时间:2012-02-03 13:25:54

标签: php regex trim

如何使用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>

之前

5 个答案:

答案 0 :(得分:4)

$str = trim($str, "\t\n");

请参阅trim

答案 1 :(得分:3)

preg_*函数提供whitespace escape sequence \s,您可以使用它,因此您的正则表达式将是:

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

也许您需要使用[\\s$]而不仅仅是\\s,我也不确定PCRE如何在这些情况下处理新行。

答案 2 :(得分:1)

  

我只想在<code><div class="b-line"></div>之后和</code>之前立即修剪空白

可以完成:

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

Example here


如果<code>标记仅出现在字符串的开头/结尾,则您希望使用^$来锚定表达式:

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

答案 3 :(得分:0)

@Vyktor的答案几乎是正确的。如果你只是对你的字符串(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);      
  ?>

答案 4 :(得分:0)

我认为这种前瞻性和基于外观的正则表达式适用于你:

$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>"