Html Dom Parser / PHP中的正则表达式

时间:2011-08-16 15:18:17

标签: php regex

源代码:

<div id="point">9</div>
<div id="point">REAL POINT: 9</div>

和解析器代码:

$point = $html->find('div[id=point]');

所以,当你写$point[0]时,它将是第一个,而另一个将是第二个。

但有时候我需要制作一个这样的算法:“找到带有id点的div,并且必须开始:”

我们可以找到

$point = $html->find('div[id=point]')->innertext=' REAL POINT:';

但是只发现div包括'REAL POINT:'

但我必须找到divs innertext 开始'REAL POINT:'

我怎么找到?

3 个答案:

答案 0 :(得分:1)

你可以使用stripos来区分大小写。

foreach($html->find('div[id=point]') as $element) {
    if ( strpos($element->innertext, 'REAL POINT:') !== FALSE ) {
        // something here
    }
}

您也可以在开头准确搜索字符串:

foreach($html->find('div[id=point]') as $element) {
    if ( strpos($element->innertext, 'REAL POINT:') === 0 ) {
        // something here
    }
}

但是如果你想在div中的第一个字符之前删除空格:

foreach($html->find('div[id=point]') as $element) {
    if ( strpos(trim($element->innertext), 'REAL POINT:') === 0 ) {
        // something here
    }
}

答案 1 :(得分:0)

使用XPath:

//div[@id='point' and starts-with(., 'REAL POINT:')]

答案 2 :(得分:0)

使用DOMDocumentDOMXPath

示例http://codepad.org/pkdd3Suz):

<?php

$html = <<<END
<html>
    <head>
        <title>Sample</title>
    </head>
    <body>
        <div id="point">9</div>
        <div id="point">REAL POINT: 9</div>
    </body>
</html>
END;

$doc = new DOMDocument;
$doc->loadHTML($html);

$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//div[@id="point" and starts-with(., "REAL POINT:")]');

if ( $nodes )
    foreach ( $nodes as $node )
        echo $node->textContent . PHP_EOL;
相关问题