2

我有一个 HTML 页面,我使用 PHP 获取 file_get_contents。

在 HTML 页面上,我有一个这样的列表:

<div class="results">
<ul>
    <li>Result 1</li>
    <li>Result 2</li>
    <li>Result 3</li>
    <li>Result 4</li>
    <li>Result 5</li>
    <li>Result 6</li>
    <li>Result 7</li>
</ul>

在 php 文件中,我使用 file_get_contents 将 html 放入字符串中。我想要的是在“结果 4”的 html 中搜索。如果找到,我想知道在哪个列表项中(我希望输出为数字)。

任何想法如何实现这一目标?

4

3 回答 3

5

PHP函数:

function getMatchedListNumber($content, $text){
    $pattern = "/<li ?.*>(.*)<\/li>/";
    preg_match_all($pattern, $content, $matches);
    $find = false;
    foreach ($matches[1] as $key=>$match) {
        if($match == $text){
            $find = $key+1;
            break;
        }
    }
    return $find;
}

使用:

$content = '<div class="results">
    <ul>
        <li>Result 1</li>
        <li>Result 2</li>
        <li>Result 3</li>
        <li>Result 4</li>
        <li>Result 5</li>
        <li>Result 6</li>
        <li>Result 7</li>
    </ul>';

$text = "Result 4";
echo getMatchedListNumber($content, $text);

输出:列表编号

4
于 2013-08-27T10:02:35.247 回答
4

如果可能,您应该始终使用 PHP 中的 DOM 库来解析 HTML。

$dom = new DOMDocument;
$dom->loadHTML($html);
$lis = $dom->getElementsByTagName("li");
$index = 0;
foreach ($lis as $li) {
    $index++;
    $value = (string) $li->nodeValue;
    if ($value == "Result 4") {
        echo $index;
    }
}

where$html将整个 HTML 放在一个字符串中(file_get_contents函数的结果)。如果 HTML 脏了,可以使用 PHP 函数tidy_repair_string来修复它。

于 2013-08-27T10:35:09.450 回答
-2

这可以通过使用explode函数来完成

<?php
$html="<div class='results'>
<ul>
    <li>Result 1</li>
    <li>Result 2</li>
    <li>Result 3</li>
    <li>Result 4</li>
    <li>Result 5</li>
    <li>Result 6</li>
    <li>Result 7</li>
</ul>";
$array1 = explode("class='results'",$html);
$array2 = explode('<li>',$array1[0];
$array3 = explode('</li>',$array2[4]);
$result = $array3[0];
?>
于 2013-08-27T10:17:36.733 回答