Как создать шаблон REGEX в MySQL для трех или более цифр, расположенных последовательно?

Я создал шаблон регулярного выражения для сопоставления последовательностей цифр, которые могут идти по возрастанию или убыванию, например 12345, 123, 321, 6789, 7654 и т. д. Однако я считаю, что этот подход может быть не самым эффективным или профессиональным способом достижения этой цели. задача.

Не могли бы вы предоставить более простое регулярное выражение, которое может соответствовать числовым последовательностям, как по возрастанию, так и по убыванию? Вот как я сейчас реализую это в Laravel

'sequential' => function ($query) {
    $query->orWhereRaw('plate_number REGEXP ?', ['\\b(123(4(5)?)?|234(5)?|345|456|567(8(9)?)?|678(9)?|789|987(6(5)?)?|876(5)?|765|654|543(2(1)?)?|432(1)?)\\b']);
},

Я попробовал несколько подходов для создания шаблона регулярного выражения, который точно соответствует последовательностям чисел. Однако шаблон регулярного выражения, который я придумал, кажется мне непрофессиональным. Не могли бы вы проверить, правильно ли это, или предложить лучший способ добиться этой цели? На рекламных объявлениях будут указаны такие номера, как, например, 1234,2345, 5432,98765,... и т. д.

Я создал шаблон регулярного выражения для сопоставления последовательностей цифр, которые могут идти по возрастанию или убыванию, например 12345, 123, 321, 6789, 7654 и т. д. Являются ли эти проверяемые значения полными значениями (т.е. других символов нет) ? это подстроки, которые можно найти в более сложном значении?

Akina 02.07.2024 13:45

Следует ли допускать пропуски в восходящей последовательности? Должен ли 0246 совпадать?

trincot 02.07.2024 14:16

0 нельзя?

trincot 02.07.2024 14:56

Ваше регулярное выражение не соответствует ни одному из следующих значений: 4567, 45678, 345678, 23456, 123456, 3456, 123456,... Есть ли еще какие-то правила?

trincot 02.07.2024 15:02

да, это не идеально, но конкретных правил больше нет, просто последовательность чисел либо по возрастанию, либо по убыванию, но они должны быть в последовательности, просто

Mimi 02.07.2024 15:07

А как насчет 0: это запрещено?

trincot 02.07.2024 15:26
Освоение архитектуры микросервисов с 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
6
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Пытаться:

^(?:(?<inc>1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){2,}.|(?<dec>9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)){2,}.)$

См.: regex101


Объяснение

  • ^...$: найти всю строку
  • (?:...|...): соответствует возрастанию или убыванию
    • (?<inc>...): увеличение определяется как
      • 1(?=2)|...: число и просмотр вперед, гарантирующий, что за ним последует преемник
      • {2,}.: возьмите как минимум два таких числа и сопоставьте третье (которое с помощью предпросмотра гарантированно будет преемником)
    • (?<dec>...: сделайте то же самое, чтобы уменьшить

это сработало ✌ Спасибо большое

Mimi 02.07.2024 15:03

Аналогично другому ответу, но заглядываем вперед с двумя цифрами вместо одной:

\b(?:(?:(?=12|23|34|45|56|67|78|89).){2,}|(?:(?=98|87|76|65|54|43|32|21).){2,}).\b

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

Если вы хотите сопоставлять не подстроки, а только всю строку, используйте ^ и $ вместо \b:

^(?:(?:(?=12|23|34|45|56|67|78|89).){2,}|(?:(?=98|87|76|65|54|43|32|21).){2,}).$

на regex101

Примечание: очевидно, 0 не разрешено (поскольку его нет в вашем регулярном выражении), поэтому я исключил его и здесь. Если вы хотите разрешить ввод таких входных данных, как 012, вам необходимо адаптировать регулярное выражение, чтобы оно также включало 01 и 10 в качестве допустимых пар.

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

Похожие вопросы

Запрос на вставку MySQL выполнен успешно, но не вставляется в таблицу базы данных
Использование ключевого слова TABLE для ВЫБРАТЬ все из и SELECT * из table_name
MySQL JSON_OBJECTAGG — Как исправить ошибку «PDOException: SQLSTATE[22032]: <>: 3158 JSON-документы могут не содержать NULL-имена элементов»?
Измените строку из одного столбца перед вставкой в ​​другой
Выполнение различных функций агрегирования для разных строк выходных данных, возвращаемых предложением group by
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ НА ДВУХ ТАБЛИЦАХ MYSQL С 3 СВЯЗАННЫМИ КОЛОННАМИ
SQL SELECT * FROM table WHERE Столбец NOT LIKE '%str%' не работает, я чувствую себя глупо
MySQL – получение неправильного результата при попытке получить случайный результат из большой таблицы
Как выбрать отдельные элементы из таблицы по переменной, а затем присоединиться к другой таблице в LINQ
Есть ли способ проверить совокупный способ получить месяц на основе полей суммы