Лучший способ удалить теги HTML в Oracle SQL - PullRequest
0 голосов
/ 13 июня 2018

У меня есть столбец comments, а комментарии, добавленные к выпуску, сохраняются в виде расширенного текста в столбце comments.Теперь я пытаюсь обработать эти данные и получить удобочитаемый вывод.Я предоставляю 2 образца comment данных, которые у меня есть в моем oracle SQL дБ, которые я пытаюсь обработать.

Пример 1:

    <html>
<body>
<div align="left"><font face="Arial Unicode MS"><span style="font-size:8pt">Display the frulog on the count values</span></font></div>
</body>
</html>

Пример 2: <not implemented in this release>

Я использовал приведенный ниже запрос для обработки html-символов

Select (REGEXP_REPLACE(comments),'<.+?>') from test_table;

Примечание: учитывайте значения, приведенные в Примере 1 и Примере 2, в столбце comments в вышеприведенной команде SQL.

результат запроса для Example 1 был Display the frulog on the count values, что я и ожидал.результат для Example 2 был ''.Значение в Example 2 не было тегом html, но оно все равно заменило теги.Как я могу сделать заявление о замене умным.

Не стесняйтесь оставлять свои предложения.

1 Ответ

0 голосов
/ 13 июня 2018

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE comments ( value ) AS
SELECT '<html>
<body>
<div align="left">
<font face="Arial Unicode MS">
<span style="font-size:8pt">
  Display the frulog on the count values
</span>
</font>
</div>
</body>
</html>' FROM DUAL UNION ALL
SELECT '<not implemented in this release>' FROM DUAL UNION ALL
SELECT '<test a="1"
  b=''2''
  c = 3
  d
  e = ">" >test</test>' FROM DUAL;

Запрос 1 :

SELECT value,
       REGEXP_REPLACE(
         value,
         '\s*</?\w+((\s+\w+(\s*=\s*(".*?"|''.*?''|[^''">\s]+))?)+\s*|\s*)/?>\s*',
         NULL,
         1,
         0,
         'im'
       ) AS replaced
FROM   comments

Результаты :

|                                    VALUE |                               REPLACED |
|------------------------------------------|----------------------------------------|
| <html>                                   | Display the frulog on the count values |
| <body>                                   |                                        |
| <div align="left">                       |                                        |
| <font face="Arial Unicode MS">           |                                        |
| <span style="font-size:8pt">             |                                        |
| Display the frulog on the count values   |                                        |
| </span>                                  |                                        |
| </font>                                  |                                        |
| </div>                                   |                                        |
| </body>                                  |                                        |
| </html>                                  |                                        |
|------------------------------------------|----------------------------------------|
| <not implemented in this release>        |                                 (null) |
|------------------------------------------|----------------------------------------|
| <test a="1"                              |                                   test | 
|   b='2'                                  |                                        |
|   c = 3                                  |                                        |
|   d                                      |                                        |
|   e = ">" >test</test>                   |                                        |

Примечание: <not implemented in this release> является допустимым HTML пользовательским элементом симя тега not и атрибуты implemented, in, this и release.

Если вы хотите заменить только определенные элементы HTML, перечислите их в начале обычноговыражение:

\s*</?(a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|bgsound|big|blink|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|content|data|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|element|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|head|header|hgroup|hr|html|i|iframe|image|img|input|ins|isindex|kbd|keygen|label|legend|li|link|listing|main|map|mark|marquee|menu|menuitem|meta|meter|multicol|nav|nextid|nobr|noembed|noframes|noscript|object|ol|optgroup|option|output|p|param|picture|plaintext|pre|progress|q|rp|rt|rtc|ruby|s|samp|script|section|select|shadow|slot|small|source|spacer|span|strike|strong|style|sub|summary|sup|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|tt|u|ul|var|video|wbr|xmp)((\s+\w+(\s*=\s*(".*?"|''.*?''|[^''">\s]+))?)+\s*|\s*)/?>\s*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...