2

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

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

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

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

4

4 回答 4

6

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

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

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

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

这只是您问题的有限子集。

使用 DOM 处理方法要健壮得多,PHP 中有几种变体。请参阅使用 PHP 和 DOM 解析 HTML

于 2009-10-15T13:45:40.620 回答
3

您不能在 php 中生成正确的 html 而无需稍后通过字符串替换来更改它吗?

也许有一些 IF ELSE 语句。

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

于 2009-10-15T13:46:14.100 回答
1

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

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

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

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

preg_replace("/<tr bgcolor=\"#[0-9a-fA-F]+\">/", '', $string)
于 2009-10-15T13:47:00.137 回答
0

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

于 2009-10-15T13:45:44.880 回答