Эквивалентно регулярному выражению mysql

Эквивалент регулярного выражения Mysql для этого шаблона:

<table (.+)width:(.+)px

Я попытался поместить этот шаблон в свой запрос, но он все равно будет попадать в элементы, которые не имеют шаблона.

Я использую этот сайт, чтобы проверить, соответствует ли элемент приведенному выше шаблону: https://regex101.com/

Это мой запрос:

select * from wp_posts where post_content regexp '<table (.+)width:(.+)px';

Это мой правильный пример post_content:

<table class = "table-schedule" style = "width: 737px;">
<tbody>
<tr>
<th>営業時間</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th class = "holiday">土</th>
<th class = "holiday">日</th>
<th class = "holiday">祝</th>
</tr>
<tr>
<td>11:00~19:00</td>
<td class = "weekday maru">○</td>
<td class = "weekday maru">休</td>
<td class = "weekday maru">○</td>
<td class = "weekday maru">○</td>
<td class = "weekday maru">○</td>
<td class = "holiday">○</td>
<td class = "holiday">○</td>
<td class = "holiday">○</td>
</tr>
</tbody>
</table>

Это другой образец post_content, который неверен. Это все равно сработает, даже если на столе нет ширины:

<table class = "table-schedule">
 <tbody>
 <tr>
 <th>営業時間</th>
 <th>月</th>
 <th>火</th>
 <th>水</th>
 <th>木</th>
 <th>金</th>
 <th class = "holiday">土</th>
 <th class = "holiday">日</th>
 <th class = "holiday">祝</th>
 </tr>
 <tr>
 <td style = "text-align: center;">
 <p>11:00~19:00</p>
 </td>
 <td class = "weekday maru" style = "text-align: center;">○</td>
 <td class = "weekday maru" style = "text-align: center;">休</td>
 <td class = "weekday maru" style = "text-align: center;">○</td>
 <td class = "weekday maru" style = "text-align: center;">休</td>
 <td class = "weekday maru" style = "text-align: center;">○</td>
 <td class = "holiday" style = "text-align: center;">休</td>
 <td class = "holiday" style = "text-align: center;">休</td>
 <td class = "holiday" style = "text-align: center;">休</td>
 </tr>
 <tr>
 <td style = "text-align: center;">
 <p>11:00~17:00</p>
 </td>
 <td style = "text-align: center;">休</td>
 <td style = "text-align: center;">○</td>
 <td style = "text-align: center;">休</td>
 <td style = "text-align: center;">○</td>
 <td style = "text-align: center;">休</td>
 <td style = "text-align: center;">○</td>
 <td style = "text-align: center;">休</td>
 <td style = "text-align: center;">休</td>
 </tr>
 </tbody>
 </table>

Примечание: версия mysql 5.6.

Это регулярное выражение должно нормально работать в MySQL.

Barmar 30.05.2019 03:30

Есть ли где-нибудь в содержании поста ширина для тех, которым вы не хотите соответствовать? Я думаю, вы хотели бы разрешить любой символ, кроме закрывающих тегов HTML в вашем регулярном выражении, чтобы убедиться, что ширина является атрибутом элемента таблицы - <table ([^>]*)width:([^>]+)px

fubar 30.05.2019 03:34

У меня это работает здесь: db-fiddle.com/f/uMB8Vufv66SLGjQmmrbjf2/1 Мне пришлось удалить все символы, отличные от ASCII, потому что я не мог понять, как заставить скрипт DB принимать их.

Barmar 30.05.2019 03:38
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
3
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя ваш текущий шаблон регулярного выражения действителен, он не будет вести себя так, как вы хотите, потому что термины (.+) могут совпадать в тегах. Попробуйте эту версию:

SELECT *
FROM wp_posts
WHERE post_content REGEXP '<table [^>]+width: [0-9]+px';

Демо

Его проблема в том, что это совпадающие строки, в которых вообще нет width. Так что, хотя это действительное улучшение, оно, похоже, не связано с проблемой.

Barmar 30.05.2019 03:37

Тогда наше понимание проблемы разнится.

Tim Biegeleisen 30.05.2019 03:38

Он написал Это все равно сработает, даже если на столе нет ширины:. Посмотрите на второй пример.

Barmar 30.05.2019 03:39

@Barmar MySQL's REGEXPпо умолчанию работает в режиме DOT ALL.

Tim Biegeleisen 30.05.2019 03:42

Похоже, они исправили это в 8.0, вам нужно использовать модификатор (?m).

Barmar 30.05.2019 03:46

Но это все еще не объясняет, почему второй пример соответствует, поскольку нигде не имеет width. Если он не опубликовал неправильный пример.

Barmar 30.05.2019 03:48

@Barmar Теперь я понимаю твою точку зрения. Я предполагал, что ниже по течению во втором тексте был случайный атрибут width=, нет часть самого тега <table>. Может быть, я ошибаюсь.

Tim Biegeleisen 30.05.2019 03:52

Или, может быть, вы правы, и он слишком упростил примеры.

Barmar 30.05.2019 03:57

И, конечно, возможно, что в его таблице есть другие случаи, когда это исправление необходимо, если не тот, который он показал.

Barmar 30.05.2019 03:58

Другие вопросы по теме