Кто-нибудь, у кого больше знаний о регулярных выражениях, знает, как разделить html-код, чтобы все теги и все слова были разделены, т.е.
<p>Some content <a href="www.test.com">A link</a></p>
Отделяется следующим образом:
array = { [0]=>"<p>", [1]=>"Some", [2]=>"content", [3]=>"<a href='www.test.com'>, [4]=>"A", [5]=>"Link", [6]=>"</a>", [7]=>"</p>"
До сих пор я использовал preg_split, и мне удалось либо успешно разбить строку на пробел, либо разбить по тегам, но затем все содержимое находится в одном элементе массива, когда я его разделил.
Кто-нибудь мне помогает?
preg_split не следует использовать в этом случае. Попробуйте preg_match_all:
$text = '<p>Some content <a href="www.test.com">A link</a></p>'; preg_match_all('/<[^>]++>|[^<>\s]++/', $text, $tokens); print_r($tokens);
вывод:
Array ( [0] => Array ( [0] => <p> [1] => Some [2] => content [3] => <a href="www.test.com"> [4] => A [5] => link [6] => </a> [7] => </p> ) )
Я предполагаю, что вы забыли включить 'A'
в 'A link'
в вашем примере.
Поймите, что, когда ваш HTML содержит <или> не означает начало или конец тегов, regex будет бесполезно испортить вещи! (следовательно, предупреждения)
Вы можете проверить простой HTML DOM Parser
Или посмотрите на парсер DOM в PHP
Попробуйте простой HTML Dom Parser . HTML слишком нерегулярен для регулярных выражений.
В настоящее время я использую простой HTML DOM Parser в нескольких приложениях и считаю его отличным инструментом даже в сравнении с другими анализаторами HTML, написанными на других языках.
Почему именно вы разделяете HTML в строку токенов, которые вы описали? Разве древовидная структура элементов DOM не подходит для вашего конкретного приложения?