2011-11-22 114 views
1

我想捕获文本“捕获这个”在$字符串下面。正则表达式捕获组与PHP preg_match不返回值

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

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

echo($matches); 

但是,那只是返回“数组”。我也尝试使用print_r打印$匹配,但是这给了我“Array()”。

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

+5

'有人能告诉我我在做什么wrong'你试图用正则表达式来解析HTML。 :) – PeeHaa

+0

https://stackoverflow.com/a/1732454/278739 – Cedric

回答

2

问题是您需要CR字符\r。你也应该在搜索组内搜索懒惰,并使用print_r来输出数组。就像这样:

$pattern = "/<\/th>.*<td>(.*?)<\/td>$/"; 

你可以看到它在这里的行动:http://codepad.viper-7.com/djRJ0e

注意它的建议来解析一个适当的HTML解析器HTML而不是使用正则表达式。

+0

非常感谢,马库斯。你能建议一个HTML解析器,这对于这样一个简单的情况是最好的吗?你会推荐一个特定的库,还是应该使用PHP的DOM功能? – hhwhy

+0

@ bow-viper1这可能会使一些光线:http://stackoverflow.com/questions/3577641/best-methods-to-parse-html-with-php/3577662#3577662和http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php – Marcus

+0

我实际上更喜欢使用PHP的DOM函数,但是我只是无法找到任何可以捕获许多没有的标记的函数分配给他们的ID或类别。但是,我会继续看,现在我明白,它被看作是以这种方式使用正则表达式。 – hhwhy

1

两件事情:

  1. 你需要从你的正则表达式删除\r,因为在你输入的字符串没有回车符。

  2. 变化echo($matches)print_r($matches)var_dump($matches)