iT邦幫忙

0

PHP 利用 preg_replace() 移除 "X" 開頭到 "Y" 結尾之間的所有內容,換行之後就失效

  • 分享至 

  • xImage

我想要把一段 HTML 的內容中移除從 "X" 開頭到 "Y" 結尾(包含 "X" 和 "Y" 也移除)
比如:

<?php
$HTML="今天我生日,我的生日是<span class=\"xxx\"> 1912 年 1 月 1日,</span>以上!";
echo preg_replace('/(,我的生日是.+?)+(以上)/i', '', $HTML);
//輸出結果:
//今天我生日!
?>

但是如果 HTML 有換行的話就會失效,

<?php
$HTML="今天我生日,我的生日是
<span class=\"xxx\"> 1912 年 1 月 1日,</span>
以上!";
echo preg_replace('/(,我的生日是.+?)+(以上)/i', '', $HTML);
//輸出結果:
//今天我生日,我的生日是 1912 年 1 月 1日, 以上!
?>

請問要如何才能包含換行字元?

20211224 更新:
修改後:
preg_replace('/(,我的生日是.+?)+(\n.+?)+(\n)?(以上)/i', '', $HTML);

不過最後我是用另一種作法:先把 $HTML 內所有的 \r,\n, 都先取代成 {br}
再執行 preg_replace('/(X.+?)+(Y)/i', '', $HTML);
最後再把 {br} 取代回 \r\n
會選擇這樣做的原因是因為實務上 $HTML 裡面會有很多特殊情況,
比如 "以上" 不是在同一行,而是
"


"
不過這又是另外一回事,要另行他法解決,基於諸多類似原因,最後選擇上述方式來處理。
謝謝各位的回覆與幫助!

fillano iT邦超人 1 級 ‧ 2021-12-23 18:30:58 檢舉
\n
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-24 09:11:53

抄 fillano 大大的答案...

<?php
$HTML="今天我生日,我的生日是
<span class=\"xxx\"> 1912 年 1 月 1日,</span>
以上!";
echo preg_replace('/,我的生日是(\n)?.*(\n)?以上!/i', '', $HTML);
?>

我要發表回答

立即登入回答