簡體   English   中英

去掉 <p></p> 從字符串的結尾?

[英]Remove <p>&nbsp;</p> from end of string?

也許是一個新手問題:

我有一個字符串:

$string = '<p>this is what we need.</p><p>&nbsp</p>';

如何使用PHP regex(不是substr)刪除最后一個字符,即<p>&nbsp</p>

我在這里找到了一個類似的問題:使用解決方案從字符串末尾刪除<br>preg_replace('/(<br>)+$/', '', $string);

但是將其更改為: preg_replace('/(<p>&nbsp;</p>)+$/', '', $string); 不起作用。

拋出PHP Warning: preg_replace(): Unknown modifier 'p'

我想我錯過了一些逃脫? <>或斜杠?

謝謝你的幫助。

您正在使用斜杠字符作為正則表達式分隔符,也作為正則表達式的一部分(在結束標記中),因此您應該將其轉義。 所以:

/(<p>&nbsp;</p>)+$/

應該

/(<p>&nbsp;<\/p>)+$/

而且似乎這不是正則表達式的工作,但它是你的電話.. str_replacestr_ireplace會做得很好

你可以做的簡單方法

$string = '<p>this is what we need.</p><p>&nbsp</p>';

$string = str_replace('<p>&nbsp</p>','',$string);

這應該做的伎倆:

$string = '<p>this is what we need.</p><p>&nbsp</p>';
$pattern = "/<p[^>]*>[\s|&nbsp;]*<\/p>/"; 
$string = preg_replace($pattern, '', $string);

這將替換所有空<p> ,而不僅僅是那些包含&nbsp;

不使用正則表達式,但保證在結束時只刪除字符串:

$string = '<p>&nbsp</p><p>the previous and next &nbsp should remain</p><p>nbsp</p><p>this is what we need.</p><p>&nbsp</p><p>&nbsp</p><p>&nbsp</p><p>&nbsp</p>';
$lenString = strlen($string);
$remove = '<p>&nbsp</p>';
$lenRemove = strlen($remove);
while (strrpos($string, $remove) === $lenString - $lenRemove) {
  $string = substr($string, 0, -$lenRemove);
  $lenString = strlen($string);
}

echo $string, PHP_EOL;

這打印<p>&nbsp</p><p>the previous and next &nbsp should remain</p><p>nbsp</p><p>this is what we need.</p>

繼續使用html內容(或url)時處理斜杠的好方法是使用除斜線之外的其他分隔符,例如:

$result = preg_replace('~(?><p>&nbsp;</p>)+$~', '', $string);

那你就不需要逃避斜線了。

請注意,您可以刪除所有無用的內容:

$result = preg_replace('~
 (?>
    <(\w++)[^>]*+>(?>\s++|&nbsp;|<br\s*+/?>)*</\1>  # empty tags
   |                                                # OR
    (?>\s++|&nbsp;|<br\s*+/?>)+                     # white spaces, br, &nbsp;
 )+$
                        ~xi', '', $string);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM