我正在尝试通过正则表达式删除所有隐藏的标签(和结束标签),它似乎有效,但有一个问题。它留下了“<>”找到所有元素。
我用它来替换我的隐藏字段为空白:
$saveContent = preg_replace('<input type="hidden" .*? />', "", $saveContent);
$saveContent = preg_replace('</form>', "", $saveContent);
它只会带回“&lt;&gt;&lt;&gt;&lt;&gt;” (2个隐藏字段和结束表单标记)。我试着用字符串替换&lt;&gt;这似乎不起作用
我错过了什么吗?
答案 0 :(得分:2)
问题(尝试将HTML与正则表达式匹配除外)是你没有在字符串中正确引用表达式,这通常在PHP中完成"/regex/"
,但是可以使用任何字符代替斜杠,例如"~regex~"
。
在你的情况下<
是引用字符,它会使结尾引用>
(即"<regex>"
),从而使其在preg_*
中有效而不会给你任何错误。
例如:
preg_replace('</form>', "", $str)
与
相同preg_replace('~/form~', "", $str)
和
preg_replace('/\/form/', "", $str)
所有这些都用空字符串替换/form
。
虽然你想要:
preg_replace('~</form>~', "", $str)
答案 1 :(得分:1)
你需要转义斜杠..并为修饰符添加斜线以使其工作http://php.net/manual/en/reference.pcre.pattern.modifiers.php
$saveContent = preg_replace('/<input type="hidden" .*? \/>/i', "", $saveContent);
$saveContent = preg_replace('/<\/form>/i', "", $saveContent);
答案 2 :(得分:0)
如果我没记错的话,你可以把模式放在%'之间,以避免所有逃脱,这使得实际上不可读,例如
if (preg_match('%</form>%', $subject)) {
# Successful match
} else {
# Match attempt failed
}
答案 3 :(得分:0)
由于某些原因(我不知道),&lt;和&gt;符号被转换为实体,但仅限于少数几个。
我只是检查了那些实体,并将字符串替换为正确的符号,然后就可以了。
答案 4 :(得分:0)
试试这个
$content = '<input type="hidden" name="abc" /> abc <input type="hidden" name="abc" />';
preg_replace('#<input type="hidden"[^>]+>#', '', $content);