【问题标题】:Parse DOM using regex [duplicate]使用正则表达式解析 DOM [重复]
【发布时间】:2015-01-29 06:22:41
【问题描述】:

我有这段 html 代码,我正在尝试使用“points”“stat-label”解析 div 中的内容。 我已经为具有“stat-label”数量的 div 完成了此操作,并且效果很好。

preg_match('#\$[0-9]{1,3}(?:,?[0-9]{3})*(?:\.[0-9]{2})?#', $xx1, $output1);
$parts1 = $output1[0];
$val1 = trim(str_replace('$','',$parts1));
$value1= preg_replace('/[\$,]/', '', $val1);

但我无法让它读取“点”的值。有什么想法吗??

试过这个:

preg_match('/^\\d+(\\.\\d+)?$/D', $xx1, $output2);

结果是:

object(DOMNodeList)#7 (1) {
  ["length"]=>
  int(0)
}


<div class="widget">
    <div class="widget-header">

        <!-- content -->
    </div>

    <div class="widget-content">

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    <!-- content -->
                </div>
                <div class="stat-value">
                    <!-- content -->
                </div>
            </div>
        </div>
        <hr>

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    <!-- content -->
                </div>
                <div class="stat-value">
                    <!-- content -->
                </div>
            </div>
        </div>
        <hr>

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    <!-- content -->
                </div>
                <div class="stat-value">
                    <!-- content -->
                </div>
            </div>
        </div>
        <hr>

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    Amount
                </div>
                <div class="stat-value">
                    <font color="green">$</font>123,456,678,012 </div>
            </div>
        </div>
        <hr>

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    Points
                </div>
                <div class="stat-value">
                    12.14 </div>
            </div>
        </div>
        <hr>

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    <!-- content -->
                </div>

                <div class="stat-value">
                    <!-- content -->
                </div>
            </div>
        </div>
        <hr>

        <div class="stat">
            <div class="stat-header">
                <div class="stat-label">
                    <!-- content -->
                </div>
                <div class="stat-value">
                    <!-- content -->
                </div>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

  • 哦,读这一篇,你会喜欢的:golden link
  • @Dexa 好吧,我现在觉得我一直在用螺丝刀修剪胡须..lol 我完全理解我的方法是错误的。请指导我使用任何更好的方法,因为我对这一切都不熟悉。

标签: php regex parsing dom


【解决方案1】:

12.14空格 包围,这是您的 RE 不期望的。要么trim()之前,要么不使用^$

【讨论】:

    【解决方案2】:

    所以,在查看了 PHP 的 dom 解析潜力之后,我放弃了使用正则表达式解析 html 的所有实例。

    这是我解决上述问题的方法:

    <?php
    $login_data=  http_build_query(array('username'=>$username,'password'=>$password));
    $html = _curl("http://example.com/getinfo.php",'POST',$login_data); // this is a curl function I use
    
    $dom = new DOMDocument();
    $dom->loadHTML($html);
    $els = $dom->getElementsByTagName('*');
    $child = 0;
    $myAmount = 0;
    foreach ( $els as $el ) {
        $firstChild = $el->firstChild;
        $child++;
    if($child == "96"){   // this was the firstChild that has the amount data
    $myAmount = trim($firstChild->wholeText);
    }
    
    }
    
    echo $myAmount; // outputs 12.14! 
    
    ?>
    

    所以,它至少对我有帮助。请参考上面 cmets 中的链接。

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 2018-04-29
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 2011-01-23
      • 2012-11-21
      • 2014-10-28
      相关资源
      最近更新 更多