2017-03-07 145 views
-2

我有一個字符串是這樣的:PHP;如何刪除分隔符和分隔符本身之間的字符串?

My name is <span class="bold">George</span> and I'm <span class="bold">21</span>. 

我需要<span class="bold"></span>之間移除一切,這本身定界符。

我需要這樣的輸出:

My name is and I'm . 

我試過如下:

$string = "My name is <span class=\"bold\">George</span> and I'm <span class=\"bold\">21</span>."; 
$string = preg_replace('/[^<span class="bold">](.*)[^<\/span>]/',' ',$string); 

但我沒有得到任何輸出,空白頁。

我在做什麼錯?

+1

用[tag:regex]解析[tag:html]是[ill suggest](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags )。 – Xorifelse

+0

@Xorifelse問題是我正在使用'mb_strimwidth($ string,0,300,'...','utf-8')'。如果這在html標籤結束我的佈局「崩潰」。否則,我會,當然,使用CSS。 – David

+0

這是你認爲會導致問題的原因嗎?否。問題是[每次嘗試用正則表達式解析HTML時,邪惡的孩子哭處女的血,和俄羅斯的黑客PWN你的web應用(http://stackoverflow.com/a/1732454/4982088)。 – Xorifelse

回答

0

你需要爲這個正則表達式,因爲你不知道,分隔符之間有什麼做的。

$str = 'My name is <span class="bold">George</span> and I\'m <span class="bold">21</span>.'; 
$fixed = preg_replace('@<span class="bold">(.+)</span>@Ui', '', $str); 

編輯:

原因,你得到空白頁就在於你想匹配的模式。基本上,您要更換任何畸形的分隔符之間沒有(這是在這種情況下,整個字符串)與空的空間 - 讓您得到串一個字符,這是一個空的空間。

PS:這是事實,使用正則表達式的「解析」 HTML可能會導致更多的問題比它解決的,所以我建議這個問題的閱讀評論。

0

我相信你正在使用一個CSS文件與它陪伴。

如果是在CSS中你可以設置顯示:沒有爲跨度類大膽。

即:.bold {顯示:無;},如果你決定使用此解決方案不要使用相同的類名。

+0

問題是我正在使用'mb_strimwidth($ string,0,300,'...','utf-8')'。如果這在html標籤結束我的佈局「崩潰」。否則,我會,當然,使用CSS。你可以幫我嗎? – David

-1
<?php 
$string = 'My name is <span class="bold">George</span> and im <span class="bold">21</span>.'; 
echo $string = preg_replace('/[^<span class="bold">]{*}[^<\/span>]/',' ',$string); 
?> 

嘗試......

+0

不會再崩潰整個輸出,但標籤不會被刪除。 – David