Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 preg_匹配的正则表达式捕获组不返回值_Php_Regex_Preg Match - Fatal编程技术网

PHP preg_匹配的正则表达式捕获组不返回值

PHP preg_匹配的正则表达式捕获组不返回值,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试捕获下面的文本捕获$string $string = "</th><td>Capture This</td>"; $pattern = "/<\/th>\r.*<td>(.*)<\/td>$/"; preg_match ($pattern, $string, $matches); echo($matches); 然而,这只是返回数组。我还尝试使用print\r打印$matches,但这给了我数组 这个模式只会

我正在尝试捕获下面的文本捕获$string

$string = "</th><td>Capture This</td>";
$pattern = "/<\/th>\r.*<td>(.*)<\/td>$/";

preg_match ($pattern, $string, $matches);

echo($matches);
然而,这只是返回数组。我还尝试使用print\r打印$matches,但这给了我数组


这个模式只会出现一次,所以我只需要它匹配一次。谁能告诉我我做错了什么吗?

问题是您需要CR字符\r。此外,您还应该使捕获组内的搜索延迟,并使用print\r输出数组。像这样:

$pattern = "/<\/th>.*<td>(.*?)<\/td>$/";
你可以在这里看到它的作用:


请注意,建议使用适当的html解析器解析html,而不是使用正则表达式。

问题是您需要CR字符\r。此外,您还应该使捕获组内的搜索延迟,并使用print\r输出数组。像这样:

$pattern = "/<\/th>.*<td>(.*?)<\/td>$/";
你可以在这里看到它的作用:

请注意,建议使用适当的html解析器解析html,而不是使用正则表达式。

两件事:

您需要从正则表达式中删除\r,因为输入字符串中没有回车符

将echo$matches更改为打印\r$matches或var\u dump$matches

两件事:

您需要从正则表达式中删除\r,因为输入字符串中没有回车符

将echo$matches更改为打印\r$matches或var\u dump$matches


有人能告诉我我做错了什么吗?你试图用正则表达式解析html有人能告诉我我做错了什么吗?你试图用正则表达式解析html非常感谢你,马库斯。您能推荐一个最适合这种简单情况的HTML解析器吗?你会推荐一个特定的库,还是我应该使用PHP的DOM函数?@bow-viper1这可能会有一些启发:实际上我更喜欢使用PHP的DOM函数,但我就是找不到任何函数可以捕获一个没有ID或类分配给它们的多个标记。但是,我会继续看下去,因为我知道以这种方式使用正则表达式是不受欢迎的。非常感谢你,马库斯。您能推荐一个最适合这种简单情况的HTML解析器吗?你会推荐一个特定的库,还是我应该使用PHP的DOM函数?@bow-viper1这可能会有一些启发:实际上我更喜欢使用PHP的DOM函数,但我就是找不到任何函数可以捕获一个没有ID或类分配给它们的多个标记。但是,现在我明白了以这种方式使用正则表达式是被轻视的,所以我将继续研究。