Поиск всех слов (или предложений) из HTML - PullRequest
3 голосов
/ 09 апреля 2019

Я пытаюсь найти все слова в блоке HTML.Чтение руководства Я подумал, что это возможно с помощью функции 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, и помочь мне определить начальную позицию каждого слова?Или расскажите мне о другом инструменте, который я должен использовать?

1 Ответ

0 голосов
/ 09 апреля 2019

Вы можете использовать доступную функцию strip_tag, preg_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
            )

    )

)
...