用于解析html代码中的股票代码的php正则表达式

时间:2015-05-17 02:21:42

标签: php html regex

我有以下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的建议。谢谢。

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);

eval.in

答案 1 :(得分:0)

答案似乎很好,但似乎要维护很多工作和代码,不是吗?

if (preg_match_all('/q\?s=(\S{1,5})\"/', $html, $match)) {
    $symbols = array_unique($match[1]);
}

甚至更短...... '/q\?s=(\S+)\"/'