我需要从整个文本中删除所有<br />
标签后的所有空格。
trim()
不起作用。
$str = "something<br /> ";
$str = preg_replace('/(<br(?: \\/)?>/\s+/', '', $str);
输出:“某物”而不是"something "
我不想删除<br />
或替换空间。
我需要从整个文本中删除所有<br />
标签后的所有空格。
trim()
不起作用。
$str = "something<br /> ";
$str = preg_replace('/(<br(?: \\/)?>/\s+/', '', $str);
输出:“某物”而不是"something "
我不想删除<br />
或替换空间。
这将删除空格字符和制表符。请注意,\s
删除所有空白字符,包括换行符,因此如果您使用它而不是空格和字符,您可能需要阅读很长的代码行\t
。
$str = preg_replace('!(\<br ?/?\>)([ ]|\t)+!i', '<br />', $str);
只有str_replace()
当您知道只有一个空格(字面意思是空格字符)后,才能使用要删除的中断标记。
否则,正则表达式是用于该任务的更好工具。
我推荐这种模式:~<br(?: /)?>\K\s+~i
<br(?: /)?>
将匹配<br>
和<br />
\K
将重新启动全字符串匹配——这消除了对捕获组的需要。如果可能,请始终避免使用捕获组,它们会花费额外的步骤并且会减慢您的模式。因为没有匹配中断标记,所以替换值只需要一个空字符串。\s+
将匹配每个中断标记后的一个或多个空白字符(空格、制表符、换行符)i
匹配中断标记,无论它们是用大写、小写还是两者的混合形式编写的。这是一个 Pattern&Replacement 演示链接:https ://regex101.com/r/1gMus1/1
代码:(演示)
<?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
Change regex to
preg_replace("(something<br \/>)\s*", "$1", $str)
this will replace your string to contain something<br />
only.
尝试这个
$str = "something<br />";
$output = str_replace("<br />", "", $str);
echo $output;
如果您只想避免空间,请尝试以下操作:
$output = trim($str);
我的解决方案:
$string = str_replace("<br /> ", "<br />", $string);