【发布时间】:2015-09-26 15:00:25
【问题描述】:
我正在寻找这个:
<h1> sample string 123.456 - find me </h1>
请注意我感兴趣的 h1 标签之间的内容。另请注意,字符串是包含数字、字母和/或字符的任意组合的变量。因此,还需要使用相同的 preg_match_all 搜索在 h1 标签之间找到以下内容:
<h1>there are no numbers this time</h1>
或
<h1>this one may be tricky ?!-.</h1>
我现在尝试了以下方法:
preg_match_all("/<h1>[\w\d\D\s]+?<\/h1>$/siU", $input, $matches);
print_r($matches);
脚本运行...但是当我print_r() 时,$matches 数组不包含任何值。因此它看起来像这样 'Array ( [0] => Array ( ) ) '
【问题讨论】:
-
\s代表空格而不是字母数字字符。即使有良好的课程"\z "也能够使世界上的所有模式都失败,因为字符串末尾没有字符。 -
^是字符串的开头。如果您的字符串只有<h1>...,则将正则表达式中的h1更正为<。s修饰符也是.匹配多行以及您的正则表达式不使用.。 -
感谢您的及时回复。因此,如果我将以上内容编辑为: "/^(
)[\w]*/siU" ?
-
如果你想要
h1标签的内容,你考虑过解析器吗? -
我认为解析器最适合你。如果你只是想用这个来学习正则表达式,那么我建议你在一个解释每一位正在做什么的网站上尝试你的正则表达式。像 regex101.com 这样的东西。您的
[\w\d\D\s]+?等同于.+?。你的\d\D说什么,因为你允许数字和任何非数字。\w还包括数字。
标签: php preg-match-all