在PHP中删除文本字符串的一部分

时间:2009-10-15 13:42:11

标签: php regex string preg-replace

我构建了一个表单,但是表单的某些行可能会返回空白,并带有默认值。我正试图找到一种搜索表单输出的方法,然后删除我不知道的那个位 - 看起来像:

<tr bgcolor="#FFFFFF">
<td>2E</td>
<td id="8003">-800</td>
</tr>

我在几个位上有效地使用了str_replace(),但我的主要问题是bgcolor =“#FFFFFF”可以更改为不同的十六进制值

我可以为每一个可能的结果写一个str_replace(),但是有没有像这样的preg_replace解决方案?它必须是一个非常复杂的正则表达式。

4 个答案:

答案 0 :(得分:6)

您可以使用preg_replace()替换正则表达式。例如,要删除可能存在或不存在可变颜色字符串的bgcolor属性:

$s = preg_replace('! bgcolor="#[0-9a-fA-F]{6}"!', '', $s);

但是,与往常一样,不建议使用正则表达式来解析或处理HTML。很多事情都可能出错:

  • 3个字母颜色代码;
  • 属性上的单引号;
  • 没有关于属性的引用;
  • 可变空格;
  • 大写属性;
  • 颜色名称;
  • rgb(N,N,N)和其他合法格式;
  • 等等。

这仅仅是针对您问题的有限部分。

使用DOM处理方法要强得多,其中PHP有几种变体。请参阅Parse HTML With PHP And DOM

答案 1 :(得分:3)

难道你不能在php中生成正确的html而不需要在以后用字符串替换来改变它吗?

也许有一些IF ELSE声明。

在我看来,这是一种更好的方法。

答案 2 :(得分:1)

匹配十六进制字符串的正则表达式实际上非常简单:

/[0-9a-fA-F]+/

你可能会听说你应该使用HTML解析器删除不需要的节点 - 也许你应该这样做,但如果你知道输入字符串是什么样的,那么也许不是。

要匹配示例中的第一行,您需要此正则表达式:

preg_replace("/<tr bgcolor=\"#[0-9a-fA-F]+\">/", '', $string)

答案 3 :(得分:0)

在尝试显示之前,您是否只能检查代码中的字段是否为“空白”?或者输入一些不输出的逻辑,如果它是空白的,不输出它?