从html中查找所有单词(或句子)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从html中查找所有单词(或句子)相关的知识,希望对你有一定的参考价值。

我试图找到一个html块中的所有单词。阅读manual我认为通过使用find('text')函数可以实现这一点。虽然我无法让它返回任何东西。

谁能告诉我我做错了什么?

require_once __DIR__ . '/simple_html_dom.php';

$html = str_get_html("<html><body><div><p><span>Hello to the <b>World</b></span></p><p> again</p></div></body></html>");

foreach($html->find('text') as $element) 
    echo $element->plaintext . '<br>';

我最终要做的是找到所有文本及其在html中的起始位置。对于这个特定的例子,它看起来像这样:

[
    0 => [
        'word' => 'Hello to the ',
        'pos' => 27
    ],
    1 => [
        'word' => 'World',
        'pos' => 43
    ],
    2 => [
        'word' => ' again',
        'pos' => 66
    ]
]

那么有人可以解释一下我在使用Simple HTML Dom做错了什么并帮我弄清楚每个单词的起始位置?或者告诉我应该使用的另一种工具?

答案

您可以使用可用的functionstrip_tagpreg_match_all来提取每个单词的位置

$str = "<html><body><div><p><span>Hello to the <b>World</b></span></p><p> again</p></div></body></html>";
$find =  '/'.str_replace(' ','|',strip_tags($str)).'/';
preg_match_all($find, strip_tags($str), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

结果: -

 Array
(
[0] => Array
    (
        [0] => Array
            (
                [0] => Hello
                [1] => 0
            )

        [1] => Array
            (
                [0] => to
                [1] => 6
            )

        [2] => Array
            (
                [0] => the
                [1] => 9
            )

        [3] => Array
            (
                [0] => World
                [1] => 13
            )

        [4] => Array
            (
                [0] => again
                [1] => 19
            )

    )

)

以上是关于从html中查找所有单词(或句子)的主要内容,如果未能解决你的问题,请参考以下文章

从单词列表中查找给定句子的字谜

使用短语中的信息查找句子中单词的索引

查找并替换所有以 # 开头的单词,并将标签文本包装在 HTML 中

查找文本文件中至少有两个共同单词的所有行(Bash)

查找字符串中单词的 semordnilap(reverse anagram)

在字符串中查找字符/单词的周围句子