它应该匹配任何h1,h2或h3标签内的文本.
preg_match("<[hH][1-3][^>]*>(.*?)<[hH][1-3]>", $text, $matches);
echo $matches[0];
Run Code Online (Sandbox Code Playgroud)
但它从未捕获任何东西.
你错过了标签末尾和正则表达式周围的正斜杠.试试这个:
preg_match("/<[hH][1-3][^>]*>(.*?)<\/[hH][1-3]>/", $text, $matches);
echo $matches[0];
Run Code Online (Sandbox Code Playgroud)
你的正则表达式正在寻找<h1>Text<h1>而不是<h1>Text</h1>.添加斜杠将捕获实际的HTML.
你需要正则表达式分隔符,而不是你有效使用的那些(尖括号).并且关闭标签上的斜线.我还建议捕获开始标记并要求结束标记相同.
preg_match('!<(h[1-3])[^>]*>(.*?)</\1>!i', $text, $matches);
echo $matches[1];
Run Code Online (Sandbox Code Playgroud)