Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式以匹配HTML标记名,但某些标记除外_Php_Html_Regex - Fatal编程技术网

PHP正则表达式以匹配HTML标记名,但某些标记除外

PHP正则表达式以匹配HTML标记名,但某些标记除外,php,html,regex,Php,Html,Regex,我试图在PHP中使用正则表达式匹配任何打开的HTML标记,除了input标记。这是我的模式 /<([a-z]+)([^>]*>)?/i /]*>)?/i 它符合以下所有条件: <input type="text"> <img src="> <a href=""> <button type="button"></button> <div id

我试图在PHP中使用正则表达式匹配任何打开的HTML标记,除了
input
标记。这是我的模式

/<([a-z]+)([^>]*>)?/i
/]*>)?/i
它符合以下所有条件:

<input type="text">
<img src=">
<a href="">
<button type="button"></button>
<div id="some"></div>
<p></p>

[编辑]
根据我的示例,我还希望只保留匹配结果中返回的标记名,例如,
img
a
按钮
div
p
,等等。

])*>(?:]*>?
<(?:(?!input)[^>])*>(?:<\/[^>]*>)?
试试这个。看演示

$re=“/])*>(?:]*>)?/im”;
$str=“\n\n

])*>(?:]*>)?
试试这个。看演示

$re=“/])*>(?:]*>)?/im”;
$str=“\n\n

使用类似的
(?!input\b)

]*>)?
要排除多个标记,请使用
(?!(?:tag1 | tag2 | tag3 |…)\b)

使用类似的
(?!input\b)

]*>)?

要排除多个标记,请使用
(?!(?:tag1 | tag2 | tag3 |…)\b)

添加一个。强制:不要使用正则表达式解析HTML。使用适当的HTML解析模块。您无法用正则表达式可靠地解析HTML,在这条路上您将面临悲伤和挫折。一旦HTML改变了您的预期,您的代码就会被破坏。有关如何使用已编写、测试和调试的PHP模块正确解析HTML的示例,请参阅或。添加一个。强制:不要使用正则表达式解析HTML。使用适当的HTML解析模块。您无法用正则表达式可靠地解析HTML,在这条路上您将面临悲伤和挫折。一旦HTML改变了您的预期,您的代码就会被破坏。有关如何使用已编写、测试和调试的PHP模块正确解析HTML的示例,请参阅或。现在,OP表示他不想要
inputasd
。根据OP的原始问题,newaz urs是正确的。现在,OP表示他不想要
inputasd
。根据OP的原始问题,newaz urs是正确的
$re = "/<(?:(?!input)[^>])*>(?:<\\/[^>]*>)?/im";
$str = "<input type=\"text\">\n<img src=\">\n<a href=\"\">\n<button type=\"button\"></button>\n<div id=\"some\"></div>\n<p></p>";

preg_match_all($re, $str, $matches);
(?!<input)<([A-Z0-9a-z]+)([^>]*>)?
<(?!input\b)([\w]+)([^>]*>)?