2013-08-06 85 views
0

我试图使用preg_replace从HTML变量中删除所有复选框。这是我使用的是什么现在:PHP RegEx删除所有复选框

echo preg_replace('/<input type="checkbox".*autocomplete="off">/', '', $html); 

要更换复选框类似如下:

<label><input type="checkbox" name="65[]" id="289" value="289" validate="required:true" autocomplete="off"> a. date of encounter</label> 

这并不在所有的工作。如果我将正则表达式更改为:

<input type="checkbox".*"> 

然后它工作但删除太多。

+2

**不要使用正则表达式来解析HTML。使用合适的HTML解析模块**您无法可靠地使用正则表达式解析HTML,并且您将面临悲伤和挫折。只要HTML从你的期望改变,你的代码就会被破坏。有关如何使用已经编写,测试和调试的PHP模块正确解析HTML的示例,请参阅http://htmlparsing.com/php。 –

+0

我解析的HTML不会随着我输出它的代码而改变。正则表达式是我需要的,谢谢。 – jfreak53

+0

如果您制作输出HTML的代码,为什么不更改输出它的代码而不输出您尝试消除的HTML? –

回答

2
preg_replace('/<input type="checkbox"(.+?)autocomplete="off">/is', '', $html); 
+2

为了让将来的读者清楚,原始问题中的'(。*)'是一个匹配最长字符串的贪婪匹配。添加'?'使它成为一个非贪婪或简洁的匹配,匹配尽可能最短的模式。另外,请注意,这个答案将'*'的0个或更多个变为'+'的1个或更多个。 –