Php Regex除了字符串以外的所有内容+;组的使用

Php Regex除了字符串以外的所有内容+;组的使用,php,regex,Php,Regex,我正在尝试创建一个html标记的白名单,下面是我的代码: $string = "<x>-<x>"; $result = preg_match('#^<(?!white1|white2)>.*<(\1)>$#i', $string); $string=“-”; $result=preg_match(“#^.*$#i”,$string); 但它返回false,我不知道为什么。我简化了正则表达式以避免混淆,但这仍然是相同的想法 我想匹配每个正确的标签

我正在尝试创建一个html标记的白名单,下面是我的代码:

$string = "<x>-<x>";
$result = preg_match('#^<(?!white1|white2)>.*<(\1)>$#i', $string);
$string=“-”;
$result=preg_match(“#^.*$#i”,$string);
但它返回false,我不知道为什么。我简化了正则表达式以避免混淆,但这仍然是相同的想法

我想匹配每个正确的标签,但我想保持安全。这个正则表达式将进行preg_替换,以擦除每个匹配的标记,并允许我允许的标记

提前谢谢你的帮助

编辑:如果我找到一种使用regexs的方法,我会把解决方案放在这里。但现在,我将使用
strip\u tags()


EDIT2:我认为最简单的方法是解析所有标记,然后还原我们允许的标记。

如果要消除不需要的标记,可以使用:

$allowedTags='';
$filteredContent=strip_标签($content,$allowedTags);

看起来您正在尝试匹配相同的标记对以及它们之间的所有标记对。为什么要这样做?
^)([^]*)>.*?$
除了
a
p
img
之外,您可以使用此正则表达式匹配所有标记及其内容。然后用空字符串替换所有匹配的标记。您可以在
preg\u replace
中直接传递这个正则表达式。它不能工作,因为当它是授权元素但未验证时它不匹配(例如:将不匹配)。谢谢,这正是我想要做的。我只是在寻找深度:p
$allowedTags     = '<p><a><img>';
$filteredContent = strip_tags($content, $allowedTags);