为什么这个正则表达式不匹配?

Jos*_*ton 1 php regex

它应该匹配任何h1,h2或h3标签内的文本.

preg_match("<[hH][1-3][^>]*>(.*?)<[hH][1-3]>", $text, $matches);
echo $matches[0];
Run Code Online (Sandbox Code Playgroud)

但它从未捕获任何东西.

Eri*_*ric 6

你错过了标签末尾和正则表达式周围的正斜杠.试试这个:

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.

  • 小尼特:这是一个正斜杠但请注意,正则表达式将匹配<h1> blah </ h2> (2认同)
  • 值得注意的是,使用正则表达式解析HTML是一个坏主意™. (2认同)

cha*_*aos 5

你需要正则表达式分隔符,而不是你有效使用的那些(尖括号).并且关闭标签上的斜线.我还建议捕获开始标记并要求结束标记相同.

preg_match('!<(h[1-3])[^>]*>(.*?)</\1>!i', $text, $matches);
echo $matches[1];
Run Code Online (Sandbox Code Playgroud)