使用php中的preg_match函数在单独的变量中剪切li标签的值

时间:2017-07-26 21:29:31

标签: php preg-match

有3个li标签,其跨度标题类长度,宽度和高度如下:

 <li style="padding-left: 20px">
<span class="title">Length:</span>
<span class="value">1.5</span>
</li>
<li style="padding-left: 20px">
<span class="title">Width:</span>
<span class="value">2.5</span>
</li>
<li style="padding-left: 20px">
<span class="title">Height:</span>
<span class="value">3.5</span>
</li>

我想在3个单独的变量中提取类值,例如 $ length = 1.5,$ width = 2.5,$ height = 3.5并插入我的数据库中的3个单独的列

目前我正在编写如下代码:

$length = (preg_match('#<span class="title">\s*Length:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';

$width  = (preg_match('#<span class="title">\s*Width:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';

$height = (preg_match('#<span class="title">\s*Height:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';

但我遇到的问题是所有3个值都插入第一列。在这方面,有谁能帮助我。

我正在添加部分代码:

if (!preg_match_all('#<div class="product-show">(.*?)</li>#s', $content, $m)) break;


        foreach ($m[1] as $prod) {

            $length = (preg_match('#<span class="title">\s*Length:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
            $width  = (preg_match('#<span class="title">\s*Width:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';
            $height = (preg_match('#<span class="title">\s*Height:\s*</span>\s*<span class="value">\s*(.*?)\s*</span>#si', $prod, $m)) ? $m[1] : '';

            $size = (preg_match('#<strong>\s*Size:\s*</strong></span>\s*<span class="value">\s*<strong>\s*(.*?)\s*</strong>#si', $prod, $m)) ? $m[1] : '';
            $sku = (preg_match('#<span class="title">\s*<strong>\s*SKU:\s*</strong>\s*</span>\s*<span class="value">\s*<strong>\s*(.*?)\s*</strong>#si', $prod, $m)) ? $m[1] : '';
            $prod_url = (preg_match('#<h2 class="product-name"><a href="([^"]*?)"#si', $prod, $m)) ? $m[1] : '';
            $img = (preg_match('#<img[^>]*?data-src="([^"]*?)"#si', $prod, $m)) ? $m[1] : '';
            scrape_product($prod_url, $img, $cat, $sku, $size, $length, $width, $height);
            $done++;
        }
除了长度,宽度和高度

之外,每件事情都有效

1 个答案:

答案 0 :(得分:0)

使用DOMDocumentXPath表达式可能会更好,而不是尝试使用在解析html方面非常糟糕的正则表达式。考虑这样的事情:

$dom=new DOMDocument;
$dom->loadHTML( $strhtml );
$xp=new DOMXPath( $dom );
$col=$xp->query('li span[ @class="value" ]');
if( !empty( $col ) ){
    foreach( $col as $node )echo $node->nodeValue;
}