PHP正则表达式以匹配HTML标记名,但某些标记除外
我试图在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
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]+)([^>]*>)?