我有以下php正则表达式代码..我想在一些html输出中提取股票代码。
我要提取的股票代码是/ q?s = XXXX - XXXX(股票代码)可能是1到5个字符。
if(preg_match_all('~(?<=q\?s=)[-A-Z.]{1,5}~', $html, $out))
{
$out[0] = array_unique($out[0]);
} else {
echo "FAIL";
}
下面的HTML代码(案例1和我应用此案例的情况)
case #1 (does *not* work)
<a href="/q?s=BLCM" symbol="BLCM">Bellicum Pharmaceuticals, Inc.</a>
case #2 (does work correctly)
<a href="/q?s=NYLD">NYLD</a>
寻找有关如何更新我的php正则表达式代码以使其适用于两者案例1和案例2的建议。谢谢。
答案 0 :(得分:0)
不要使用正则表达式,而是有效地使用DOM和 XPath 为您执行此操作。
$doc = new DOMDocument;
@$doc->loadHTML($html); // load the HTML data
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a[substring(@href, 1, 5) = "/q?s="]');
foreach ($links as $link) {
$results[] = str_replace('/q?s=', '', $link->getAttribute('href'));
}
print_r($results);
答案 1 :(得分:0)
答案似乎很好,但似乎要维护很多工作和代码,不是吗?
if (preg_match_all('/q\?s=(\S{1,5})\"/', $html, $match)) {
$symbols = array_unique($match[1]);
}
甚至更短...... '/q\?s=(\S+)\"/'