Как искать и заменять пустые строки таблицы html разрывами строк в базе данных mysql - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно найти и заменить этот html в базе данных mysql (через phpMyAdmin):

<tr>
<td></td>
<td></td>
</tr>

Но я не знаю, как его найти, так как в нем есть разрывы строк.

Мой текущий запрос:

UPDATE `wp_posts`
 SET `post_content` = replace(post_content, '<tr>
                              <td></td>
                              <td></td>
                              </tr>', '')

Но, очевидно, он не работает.

Как я могу нацелить его?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

вы можете использовать REGEXP_REPLACE.Обратите внимание, что приведенное регулярное выражение работает как для окон, так и для новых строк в стиле Linux.Также обратите внимание, что возможное использование пробелов также рассматривается в регулярных выражениях.

REGEXP_REPLACE(x, '<tr>(\s*\r*\n*\s*<td>\s*\r*\n*\s*</td>){2}\s*\r*\n*\s*</tr>', '<<replaced>>' )
  • \n - это новая строка в стиле Linux
  • \r\n - это новая строка в стиле Windows
  • \s - это пробел

create table t (x varchar(1000));
insert into t values ('before <tr>\n<td></td>\n<td></td>\n</tr> after')
select * from t
| x                                                    |
| :--------------------------------------------------- |
| before <tr><br><td></td><br><td></td><br></tr> after |
select REGEXP_REPLACE(x, '<tr>(\s*\r*\n*\s*<td>\s*\r*\n*\s*</td>){2}\s*\r*\n*\s*</tr>', '<<replaced>>' ) from t
| REGEXP_REPLACE(x, '<tr>(\s*\r*\n*\s*<td>\s*\r*\n*\s*</td>){2}\s*\r*\n*\s*</tr>', '<<replaced>>' ) |
| :------------------------------------------------------------------------------------------------ |
| before <<replaced>> after                                                                         |
update t set x = REGEXP_REPLACE(x, '<tr>(\s*\r*\n*\s*<td>\s*\r*\n*\s*</td>){2}\s*\r*\n*\s*</tr>', '<<replaced>>' )

db <> скрипка здесь

0 голосов
/ 12 февраля 2019

Если вы хотите заменить строку, состоящую из 4 строк , вам следует быть осторожным с переносами строк.Например, в вашем запросе у вас есть дополнительные пробелы в начале строк 2, 3 и 4, которые, вероятно, не будут совпадать.

В зависимости от вашей установки, разрывы строк могут быть \r\n или \n.

UPDATE `wp_posts` 
SET `post_content` = REPLACE(
    post_content, 
    '<tr>\n<td></td>\n<td></td>\n</tr>', 
    ''
  )

Если вы хотите заменить 4 разных строки , то вы можете либо запустить обновления по одному, либо создать 4-уровневую вложенную документацию REPLACE(),Вот примеры для двух строковых частей:

UPDATE `wp_posts` SET `post_content` = REPLACE(post_content, '<tr>', '');
UPDATE `wp_posts` SET `post_content` = REPLACE(post_content, '<td></td>', '');

Или:

UPDATE `wp_posts` 
SET `post_content` = 
    REPLACE(
        REPLACE(
             post_content, 
            '<td></td>',
            ''
        ),
        '<tr>', 
        ''
    )
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...