Как пропустить HTML-теги в атрибуте таблицы MySQL при выполнении выбора - PullRequest
1 голос
/ 14 июня 2019

У меня есть таблица, в которой каждая строка состоит из атрибута, состоящего из html-данных, например:

<div className="single_line"><p>New note example</p></div>

Мне нужно пропустить html-теги и извлечь только данные внутри тегов с помощью SQL-запроса. Есть идеи, как этого добиться? Я пробовал разные регулярные выражения, но они не работали.

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Есть 2 решения, основанные на версии MySQL.

Если вы используете MySQL 8.0, вы можете использовать REGEXP_REPLACE () непосредственно внутри оператора select.

SELECT REGEXP_REPLACE('<div><p>New note example</p></div>', (<[^>]*>)|(&nbsp;), '');

Если вы используете MySQL 5.7, вам нужно создать пользовательскую функцию определения в базе данных для удаления HTML-тегов.

DROP FUNCTION IF EXISTS fn_strip_html_tags;

CREATE FUNCTION fn_strip_html_tags( html_text TEXT ) RETURNS TEXT  
BEGIN  
     DECLARE start,end INT DEFAULT 1; 
     DECLARE text_without_nbsp TEXT;
     LOOP
        SET start = LOCATE("<", html_text, start);
        IF (!start) THEN RETURN html_text; END IF;
        SET end = LOCATE(">", html_text, start);
        IF (!end) THEN SET end = start; END IF;
        SET text_without_nbsp = REPLACE(html_text, "&nbsp;", " ");
        SET html_text = INSERT(text_without_nbsp, start, end - start + 1, "");
            END LOOP;
END

Например

SELECT fn_strip_html_tags('<div><p>New note example</p></div>');
0 голосов
/ 14 июня 2019

Я не совсем уверен, что вы можете использовать любой JS при создании какого-либо SQL-запроса, но вы можете использовать шаблон "<[^>] *>" в инструкции replaceAll () как таковой:

row_content = row.replaceAll("<[^>]*>", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...