SQLite, как с регулярными выражениями - PullRequest
2 голосов
/ 08 сентября 2011

У меня есть столбец с содержимым HTML. Я хочу найти слова в этом столбце, но только текст, а не код HTML.

Например:

(1) <p class="last">First time I went there...</p>
(2) This is a <em>very</em> subtle colour.

(1) Поиск по last не находит его, потому что это имя класса, а не содержимое.
(2) Поиск very subtle найдет его, игнорируя HTML

Возможно ли это с SQLite напрямую?

Примечание: я не могу определить функции.

Ответы [ 2 ]

1 голос
/ 29 сентября 2012

Не делайте этого с SQLite.

Делайте это с вашим языком программирования, вашей платформой, использующей SQLite.

В таблице, где у вас есть столбец с HTML-кодом.Добавьте дополнительные столбцы для данных о html.Вам придется собирать данные для дополнительных столбцов, в то время как вы анализируете html с помощью вашей инфраструктуры.

Отслеживает данные о структуре, имеющейся в формате html, и сохраняет в дополнительном столбце текстовое содержимое данных html..

Вы можете получить все теги простым REGEX:

/<?[^<>]+>?/

Проверьте, как вы получаете данные путем сканирования html-данных на наличие тегов с помощью приведенного выше регулярного выражения и напишите повторную оценку для содержимого тегов.(т.е. если строка в массиве результатов начинается с «<», это тэг, отсканировав ее с помощью <code>/<\s*\/\s*[^>]+>/, вы увидите, является ли она конечным тэгом, и отсканировав ее с помощью /<\s*[^\/>]+\s*\/\s*>/, увидите, будет ли онаявляется одним закрытым тегом. Если ни одно из дифференцированных состояний не применимо, это текстовое содержимое.

0 голосов
/ 08 сентября 2011

Нет хорошего способа сделать это напрямую в SQLite (вам нужно создать расширение SQLite, которое бы анализировало HTML и позволяло вам осуществлять поиск по нему, как тип поля XML MSSQL).

Лучше всего будет проанализировать HTML-код в вашем коде и записать весь текст в отдельный столбец для поиска, как предлагает @Kevin в комментариях.

* 1005 Е.Г. *

 ID | HTML                                   | Text
 ---------------------------------------------------------------------------
 1  | <p class="last">First time ...</p>     | First time ...
 2  | This is a <em>very</em> subtle colour. | This is a very subtle colour.
...