我想要把一段 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 大大的答案...
<?php
$HTML="今天我生日,我的生日是
<span class=\"xxx\"> 1912 年 1 月 1日,</span>
以上!";
echo preg_replace('/,我的生日是(\n)?.*(\n)?以上!/i', '', $HTML);
?>