我尝试删除在特定字符串之前显示的input
标记。我有一个巨大的字符串,由一个表单/ table / tr / td /输入组成,超过100个。这是以下示例html:
<input type="hidden" name="special" value="123">
...
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76022" value="y"> Enable Search
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76006" value="y"> Enable Display
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76137" checked value="y"> Enable Notes
</td>
</tr>
...
我想说我要删除Enable Display
的输入标记。到目前为止,我可以选择启用显示,
^(.*?(\bEnable Display\b)[^$]*)$
但我不确定如何转到上一个标记<input...>
并删除它(或者更好的是,选择整个文档,但不包括那些输入)。
我还有单独的 input
标记,我必须根据name
属性删除这些标记。所以基本上,正则表达式将给出以下输出:
...
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76022" value="y"> Enable Search
</td>
</tr>
<tr>
<td>
Enable Display
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76137" checked value="y"> Enable Notes
</td>
</tr>
...
正如您所看到的,第一个隐藏的输入名称为&#34; special&#34;和#34;启用显示&#34;旁边的输入一样消失了。
答案 0 :(得分:0)
设计单个正则表达式以一次性实现您想要的效果,并不是一件容易的事情,并且执行起来会很慢。
您可能想要考虑替代方法 - 循环遍历行/标记(可能使用XML / HTML PHP解析器之一)并根据您的标准构建所需的输出。
答案 1 :(得分:0)
#!/usr/bin/php
<?php
$string = <<<'EOT'
<input type="hidden" name="special" value="123">
...
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76022" value="y"> Enable Search
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76006" value="y"> Enable Display
</td>
</tr>
<tr>
<td>
<input type="checkbox" name="extendedeventinfo76137" checked value="y"> Enable Notes
</td>
</tr>
...
EOT;
echo preg_replace('/<input .* name="special" .*>|
<input .*>(?=\ Enable\ Display)/x', '', $string);