2013-07-25 85 views
0

我需要从整个文本中删除全部空格,全部为<br />标记。如何清除<br />标记后的所有空格

trim()不起作用。

$str = "something<br /> "; 
$str = preg_replace('/(<br(?: \\/)?>/\s+/', '', $str); 

输出:我不想删除<br />或更换空间,而不是"something "

“东西”。

+0

要删除
标签或空间? –

+0

'$ str =“something
”;''会用空格输出'something',而不是空格 –

+0

其中空格在这个例子中:'something
' – 2013-07-25 21:41:21

回答

2

这将删除空格字符和标签

-1

变化正则表达式来

preg_replace("(something<br \/>)\s*", "$1", $str) 

这将取代您的字符串只包含something<br />

$output = trim($str); 
+0

我想只替换空间。看到我编辑的答案 –

+0

@EddieD后' – mavili

+0

我认为人们误解了我,我需要用全文替换

-1

如果你想不仅避免了空间,比试试这个试试这个

$str = "something<br />"; 
$output = str_replace("<br />", "", $str); 
echo $output; 

。请注意,\s会删除包括换行符在内的所有空白字符,因此如果您使用它而不是空格和\t字符,则可能需要很长的代码行才能阅读。

$str = preg_replace('!(\<br ?/?\>)([ ]|\t)+!i', '<br />', $str); 
+0

当我从数据库 –

-1

我的解决办法:

$string = str_replace("<br /> ", "<br />", $string); 
+0

这是确定要求我用这个标签添加一个空格,这是行不通的空白space'? '@ EddieD.' –

+0

我想也许你的解决方案会起作用! –

+0

它没有工作..我不知道到底发生了什么......我复制并粘贴文本在textarea然后我把一些br标记插入数据库,当我要求它在更新页它带有空格在br标签后 –

0

你只能使用str_replace()如果你知道只有一个空间(字面空格字符),其落后休息标签被删除。

否则,正则表达式是用于该任务的更好的工具。

我建议这种模式:~<br(?: /)?>\K\s+~i

  • 使用模式分隔符,是不是避免使用反斜杠逃脱模式中的斜杠斜杠。
  • <br(?: /)?>将匹配<br><br />
  • \K将重启fullstring比赛 - 这消除了对捕获组的需要。如果可能的话,总是避免使用捕获组,它们会花费额外的步骤并会减慢你的模式。因为中断标记未被匹配,所以替换值需要一个空字符串。
  • \s+将匹配的一个或多个空格字符落后各个击破标签
  • i标志/模式修改将匹配换行标记它们是否已写在大写,小写或的混合物(空格,制表符,换行符)二。

这个模式&更换演示链接:https://regex101.com/r/1gMus1/1

代码:(Demo

<?php 
$string='This is a space after a <br> break. 
This is 2 spaces after a <br> break. 
This is a tab after a <br> break. 
This is a newline after a <br> 
break'; 

var_export(str_replace(['<br> ','<br /> '],['<br>','<br />'],$string)); // if you KNOW there is only one space 

echo "\n\n"; 

var_export(preg_replace('~<br(?: /)?>\K\s+~i','',$string)); // if you want to remove all spaces, tabs, newlines 
?> 

你原来的模式接近,但它有几个缺陷:

/(<br(?: \\/)?>/\s+/ 
// ^   ^-- an unexpected, pattern-crippling forward slash 
// |-- the start of a capture group, but no closing parenthesis 

ps对于记录/<br[^>]*>\K\s+/i/稍微快一点但对br标记语法的文字较少。

如果你正在对“空间”非常字面,不想匹配换行符或制表符,那么这将很好地做:~<br(?: /)?>\K +~i

相关问题