可能是个新手问题:
我有一个这样的字符串:
$string = '<p>this is what we need.</p><p> </p>';
我如何删除最后字符,即<p> </p>
,使用PHP regex(不是substr)?
我在这里发现了一个类似的问题:从字符串的末尾删除
s溶液:preg_replace('/(<br>)+$/', '', $string);
但将其改为:preg_replace('/(<p> </p>)+$/', '', $string);
不工作。
抛出PHP Warning: preg_replace(): Unknown modifier 'p'
我猜我错过了一些逃脱?<>还是斜杠?
谢谢你的帮助。
您使用斜杠字符作为regex分隔符,也作为regex的一部分(在结束p标记中),因此您应该转义它。所以:
/(<p> </p>)+$/
应为
/(<p> <'/p>)+$/
而且似乎这不是一个正则表达式的那种工作,但它是你的呼叫…Str_replace或str_ireplace就可以了
方法很简单
$string = '<p>this is what we need.</p><p> </p>';
$string = str_replace('<p> </p>','',$string);
这应该能奏效:
$string = '<p>this is what we need.</p><p> </p>';
$pattern = "/<p[^>]*>['s| ]*<'/p>/";
$string = preg_replace($pattern, '', $string);
这将取代所有空的<p>
,而不仅仅是那些包含
的
不使用正则表达式,但保证只删除位于末尾的字符串:
$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>
处理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);