2012-03-13 113 views
3

快速的问题:删除开始和结束<br>标签PHP

什么是去从$string的开始和结束消除<br><br />标签的最佳方式?

我正在使用此代码,但似乎并没有删除只是<br>标签。

$str = preg_replace('{^(<br(\s*/)?>|ANDnbsp;)+}i', '', $str); 
$str = preg_replace('{(<br(\s*/)?>|ANDnbsp;)+$}i', '', $str); 

编辑:附加信息

此代码是处理已经从一个古老的CMS导入的信息。

因此,我知道,我需要替换的唯一两个标签是<br><br />。此外,我只能在$string的最开始和最末端替换这些标签,而不是在之间。

我不需要处理任何其他标签;格式不正确的HTML或其他属性。

本质上,我只想扩展我建议的代码,以便替换<br>标签以及<br />

我很抱歉没有提供足够的信息开始。


在此先感谢,正则表达式的

+0

你正在为我工​​作正常。 – Toto 2012-03-13 14:53:37

回答

3

一种可能是这样的:

"/(^)?(<br\s*\/?>\s*)+$/" 

因此,让我们可以很清楚的:

$str = preg_replace("/(^)?(<br\s*\/?>\s*)+$/", "", $str); 

解释:

  • * - 匹配0次或更多次;
  • \ s - 匹配任何空格字符;
  • ? - 匹配0或1次;或者:最短匹配;
  • ^- 仅匹配字符串的开头;
  • $ - 只匹配字符串的末尾;

一个很好的起点:Regular expressions in Perl

+0

对不起,是一个痛苦,我在正则表达式很糟糕。你能解释你的正则表达式是如何工作的吗?为什么我的代码在其中没有??>? – dunc 2012-03-13 14:30:29

+0

编辑答案:D – 2012-03-13 14:35:23

+1

例如,不匹配'
'。 – Qtax 2012-03-13 14:45:20

2

你不可使用正则表达式来解析HTML。

如果你得到一个匹配<br /><br>正则表达式,如果有人在styleclass,或id抛出,会发生什么?如果你这样写,那么如果他们输入一个标题呢?或者只是放入一些格式不正确的代码?

您应该使用像strip_tags()here这样的功能。

或DOM解析器here

+6

您的DOM解析器如何处理格式错误或格式不正确的代码?可能比你的平均正则表达式差,我猜? strip_tags没有做他想做的事情,因为它删除*每个*标记,而不仅仅是行尾。 你不应该使用正则表达式来解析HTML,但请保持一点务实?有时候,不好的做法是最好的做法,盲目地高喊伪圣经线路不会帮助任何人。 – 2012-03-13 14:41:17

+0

我很抱歉你一直是我的首选目标,但如果他们不知道所有症状,我会厌恶处方药。 – 2012-03-13 14:42:45

+1

*“你的DOM解析器如何处理格式错误或格式不正确的代码?” - 比大多数正则表达式更好。 – Qtax 2012-03-13 14:50:04

相关问题