我构建了一个表单,但是表单的某些行可能会返回空白,并带有默认值。我正试图找到一种搜索表单输出的方法,然后删除我不知道的那个位 - 看起来像:
<tr bgcolor="#FFFFFF">
<td>2E</td>
<td id="8003">-800</td>
</tr>
我在几个位上有效地使用了str_replace(),但我的主要问题是bgcolor =“#FFFFFF”可以更改为不同的十六进制值
我可以为每一个可能的结果写一个str_replace(),但是有没有像这样的preg_replace解决方案?它必须是一个非常复杂的正则表达式。
答案 0 :(得分:6)
您可以使用preg_replace()
替换正则表达式。例如,要删除可能存在或不存在可变颜色字符串的bgcolor属性:
$s = preg_replace('! bgcolor="#[0-9a-fA-F]{6}"!', '', $s);
但是,与往常一样,不建议使用正则表达式来解析或处理HTML。很多事情都可能出错:
这仅仅是针对您问题的有限部分。
使用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)
在尝试显示之前,您是否只能检查代码中的字段是否为“空白”?或者输入一些不输出的逻辑,如果它是空白的,不输出它?