У меня есть строка как таковая:
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Mauris non rutrum velit. Morbi sed turpis in urna fermentum sodales.<br>
Proin aliquet nisi a congue egestas.
</p>
Я пытаюсь написать программу на PHP, чтобы взять каждое слово и поместить его в базу данных MySQL. Я думаю, что самый простой способ сделать это — использовать регулярное выражение и поставить каждое слово (и пунктуацию И пробел после него, но НЕ тег перевода строки, который должен быть отдельным словом).
Текущее регулярное выражение, которое я использую:/([\S]{1,} ?)/
, Это выражение имеет следующие проблемы:
Хорошо, что теги абзаца захвачены, это часть функциональности, которая мне нужна для моей таблицы MySQL.
Вы можете сделать это без регулярных выражений. Используйте метки полосы, чтобы удалить все элементы, потому что <sup><sub><em><i><strong><b><s>
и другие элементы форматирования все сломаются. Тогда просто взорваться на пространствах.
$string = '<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
Mauris non rutrum velit. Morbi sed turpis in urna fermentum sodales.<br>
Proin aliquet nisi a congue egestas.
</p>';
$words = explode(' ', trim(strip_tags($string)));
foreach ($words as $word) {
echo $word . "\n";
}
Выход:
Lorem
ipsum
dolor
sit
amet,
consectetur
adipiscing
elit.
Mauris
non
rutrum
velit.
Morbi
sed
turpis
in
urna
fermentum
sodales.
Proin
aliquet
nisi
a
congue
egestas.
Вы можете использовать регулярное выражение вместо взрыва, если хотите убрать пунктуацию, но это звучит так, как будто вы хотели этого со словом.
Если вы хотите просто слова, но теги HTML & пространства;
1- Удалите все теги HTML
2- Используйте шаблон RE, который не ставит пробелы
Это то, что я понял из вопроса :), но извините, если я ошибаюсь.
$input = strip_tags($input);
$words = preg_split('~\s+~', $input, -1, PREG_SPLIT_NO_EMPTY);
(<\s*[^\s="'>]+(\s+[^\s="'>]+(=("[^"]*"|'[^']*'))?)*\s*/?>|<\s*/\s*[^\s="'>]+\s*>|\S+)\s*
Это регулярное выражение состоит из трех частей:
<\s*[^\s="'>]+(\s+[^\s="'>]+(=("[^"]*"|'[^']*'))?)*\s*/?>
Это находит HTML открывающие теги. Он допускает произвольное заполнение пробелом в теге, атрибуты в кавычках, логические атрибуты и самозакрывающиеся теги.
<\s*/\s*[^\s="'>]+\s*>
Это находит HTML конечные теги. Это проще, так как ему не нужно делать атрибуты.
\S+
Это тот, который просто ищет последовательность символов, не являющихся пробелами, и ловит не-HTML слова и знаки препинания.
Наконец, я сгруппировал все это и добавил \s*
поймать любой пробел после тега или слова.
Вы можете попробовать это:
var str = '<p> some string here... </p> ';
var res = str.split(' ');
<br>
с ».Итак, результат должен быть: var res = str.split(' ').replace('<br>', '');