也许是一个新手问题:
我有一个字符串:
$string = '<p>this is what we need.</p><p> </p>';
如何使用PHP regex(不是substr)删除最后一个字符,即<p> </p>
?
我在这里找到了一个类似的问题:remove <br>'s from the end of a string
解决方案:preg_replace('/(<br>)+$/', '', $string);
但是将其更改为:preg_replace('/(<p> </p>)+$/', '', $string);
不起作用。
抛出PHP Warning: preg_replace(): Unknown modifier 'p'
我想我错过了一些逃避? &lt;&gt;还是斜杠?
感谢您的帮助。
答案 0 :(得分:5)
您正在使用斜杠字符作为正则表达式分隔符,也是正则表达式的一部分(在结束标记中),因此您应该将其转义。所以:
/(<p> </p>)+$/
应该是
/(<p> <\/p>)+$/
而且似乎这不是正则表达式的工作,但这是你的电话.. str_replace或str_ireplace可以正常工作
答案 1 :(得分:2)
你能做的简单方法
$string = '<p>this is what we need.</p><p> </p>';
$string = str_replace('<p> </p>','',$string);
答案 2 :(得分:0)
这应该可以解决问题:
$string = '<p>this is what we need.</p><p> </p>';
$pattern = "/<p[^>]*>[\s| ]*<\/p>/";
$string = preg_replace($pattern, '', $string);
这会替换所有空<p>
,而不仅仅是那些包含
答案 3 :(得分:0)
不使用正则表达式,但保证在结束时只删除字符串:
$string = '<p> </p><p>the previous and next   should remain</p><p>nbsp</p><p>this is what we need.</p><p> </p><p> </p><p> </p><p> </p>';
$lenString = strlen($string);
$remove = '<p> </p>';
$lenRemove = strlen($remove);
while (strrpos($string, $remove) === $lenString - $lenRemove) {
$string = substr($string, 0, -$lenRemove);
$lenString = strlen($string);
}
echo $string, PHP_EOL;
这会打印<p> </p><p>the previous and next   should remain</p><p>nbsp</p><p>this is what we need.</p>
答案 4 :(得分:0)
在继续使用html内容(或url)时处理斜杠的好方法是使用除斜线之外的其他分隔符,例如:
$result = preg_replace('~(?><p> </p>)+$~', '', $string);
然后你不需要逃避斜杠。
请注意,您可以删除所有无用的内容:
$result = preg_replace('~
(?>
<(\w++)[^>]*+>(?>\s++| |<br\s*+/?>)*</\1> # empty tags
| # OR
(?>\s++| |<br\s*+/?>)+ # white spaces, br,
)+$
~xi', '', $string);