2017-03-07 96 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