Regex в MySQL: как сопоставить каждое вхождение ключа с шаблоном значения? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть эти данные:

Что мне нужно сделать: 1) Для каждого вхождения My-Name словарного ключа (который может встречаться 0 или более раз), убедитесь, что за ним следует присвоение переменной AND, и в этом значении ключа есть слова Good и firstOnly в любом порядке в любом порядке.

Примеры полей данных:

Example#1 (не должно совпадать, поскольку 'My-Name' не содержит Good и firstOnly):

{'Accept-Encoding, Accept', 'My-Name': 'PHPSESSID = bbb; Путь = /», 'Cache-Control': 'public, max-age = 14400'}

Пример # 2 (НЕ ДОЛЖЕН совпадать, так как второе вхождение 'My-Name' не содержит ни Good, ни firstOnly. Однако первое совпадение совпадений. Но мне нужно проверить каждое вхождение 'My-Name' это критерии)

{'Accept-Encoding, Accept', 'My-Name': 'PHPSESSID = aaa; Хорошо; firstOnly; path = / ',' Cache-Control ':' public, max-age = 14400 ', «Мое имя»: «PHPSESSID = xxx; Хорошо}

Пример # 3 (должен совпадать, потому что за каждым 'My-Name' следуют Good и firstOnly):

{'Accept-Encoding, Accept', 'My-Name': 'PHPSESSID = aaa; Хорошо; firstOnly; path = / ',' Cache-Control ':' public, max-age = 14400 ', «Мое имя»: «PHPSESSID = xxx; Хорошо; firstOnly}

Мой запрос:

select mycol
from mytable
where mycol regexp "('|"")My-Name('|""):\\s*('|"")[^()<>@,;:\\""'/?={}]*\\s*=\\s*[^()<>@,;:""'?={}]*;\\s*((Good[^'""]*firstOnly)|(firstOnly[^'""]*Good))[^'""]*('|"")";

Приведенный выше запрос возвращает записи Example#2 и Example#3. Он не должен возвращать пример № 2.

Вопрос: Можете ли вы указать мне, как улучшить запрос для проверки каждого вхождения из 'My-Name': ключа в соответствии с моими критериями?

...