[英]php: remove <p>, </p>, <br> and <br /> from beginning and end of string
[英]Remove <p> </p> from end of string?
也許是一個新手問題:
我有一個字符串:
$string = '<p>this is what we need.</p><p> </p>';
如何使用PHP regex(不是substr)刪除最后一個字符,即<p> </p>
?
我在這里找到了一個類似的問題:使用解決方案從字符串末尾刪除<br> : preg_replace('/(<br>)+$/', '', $string);
但是將其更改為: preg_replace('/(<p> </p>)+$/', '', $string);
不起作用。
拋出PHP Warning: preg_replace(): Unknown modifier '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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.