这是我的代码:
$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
。
我的正则表达式应该是双引号之间的所有内容。
任何人都可以对此有所了解吗?我对正则表达式来说相对较新。
答案 0 :(得分:1)
这里有很多错误:
preg_match
的首要结果只是返回值而非匹配结果。这可以在$matches
参数中找到。答案 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