Хобрук: Ваш путь к мастерству в программировании

Mariadb: Regexp_substr не работает с несоответствующим групповым регулярным выражением

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

SELECT REGEXP_SUBSTR(message, '(?:member: )(\d+)' ) AS user_id from posts where message like '%quote%';

Теперь, игнорируя тот факт, что это уродливый SQL, а не окончательный, мне просто нужно добраться до точки, где он считывает идентификатор пользователя. Ниже приведен пример текста, который вы увидите в столбце сообщений.

`QUOTE="Moony, post: 967760, member: 22665"]I'm underwhelmed...[/QUOTE]

Hopefully we aren’t done yet and this is nothing but a depth signing!`

Есть ли что-то другое в регулярном выражении при использовании в mariadb REGEXP_SUBST? это должно быть PCRE, работает в тестере регулярных выражений и должно читаться правильно. Он должен искать группу «member:», а затем брать числа после этого и иметь одно совпадение для всех этих сообщений.

05.12.2017

  • Я не понимаю, почему вы группируете строку member:, какой бы она не была. 06.12.2017
  • Кажется, вы хотите '(?<=member: )\d+' 06.12.2017
  • @WiktorStribiżew (?<=member: )\d+ дает тот же результат, который равен нулю. И ваше регулярное выражение, и мое работают, если я тестирую его на regex101.com, но не когда оно находится внутри SQL-запроса. 06.12.2017
  • @DanFarrell Я группирую это, так как это кажется наиболее логичной группировкой поиска для идентификации этой группы чисел, поскольку я не могу полагаться на согласованность позиции 06.12.2017

Ответы:


1

Это уродливый хак/обходной путь, который работает, используя просмотр вперед для следующих "], однако не будет работать, если в сообщении есть несколько кавычек.

(?<=member: )\.+(?="])

06.12.2017
Новые материалы

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

Как я опубликовал свое первое приложение в App Store в 13 лет
Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

Что в лицо
Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

Почему шаблоны проектирования и почему нет?
Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..