正则表达式产生不希望的结果

时间:2014-04-10 20:49:20

标签: php regex

这是我的代码:

$pattern = '/"([^"]*)"/' ;
$subject = '<a href="this/is/what/i/want">text_text_text</a>';
$data = preg_match($pattern, $subject, $matches);
echo $data;

我希望$data成为this/is/what/i/want,但当我回复它时,我会1。 我的正则表达式应该是双引号之间的所有内容。

任何人都可以对此有所了解吗?我对正则表达式来说相对较新。

3 个答案:

答案 0 :(得分:1)

这里有很多错误:

  1. preg_match的首要结果只是返回值而非匹配结果。这可以在$matches参数中找到。
  2. 使用正则表达式解析HTML可能容易出错。
  3. 你没有展示你的正则表达式。

答案 1 :(得分:0)

您需要使用$matches,而不是$data$data保存函数的返回值,该值为true / false(将以 1 / 0回显)。第3个参数$matches包含实际找到的匹配项(以及函数处理的其他一些值)。

// '$data = ' is not neccesary, if you only want the matches:
preg_match($pattern, $subject, $matches);
print_r($matches);

答案 2 :(得分:0)

从href获取属性的最佳方法不是使用preg_match而是使用更好的对象

$subject = '<a href="this/is/what/i/want">text_text_text</a>'; 

$dom = new DOMDocument();
$dom->loadHTML($subject);
$xpath = new DOMXPath($dom);

$ahrefs = $xpath->query('//a');

foreach ($ahrefs as $ahref) { 
  $data = $ahref->attributes->getNamedItem("href")->nodeValue . "<br />";
} 
echo $data;

输出:

 this/is/what/i/want