REGEX для MySQL Query буквенно-цифровые значения со специальными символами - PullRequest
0 голосов
/ 08 января 2019

Каков наилучший способ поиска значения этого типа с помощью регулярного выражения в MySQL?

"ABCDE / + 19876543210 @ ABC-DEF"

ABCDE/ представляет конкретное значение, которое не изменяется

@abc-def также представляет конкретное значение, которое не изменяется

Моя неудачная попытка ниже:

SELECT BLAH
FROM BLOOP
WHERE (bloop.field REGEXP'^\\ABCDE/+1(123|234|345|456)[1-9]{7}@abc-def$')

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы не сбежали +. в регулярном выражении оно имеет особое значение, означающее один или несколько раз.

Вы можете использовать это

^ABCDE\/\\+1(123|234|345|456)[1-9]{7}@abc-def$

Демо

0 голосов
/ 08 января 2019

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

mysql> select 'ABCDE/+19876543210@abc-def' regexp 
  '^ABCDE/\\+1(123|234|345|456)[0-9]{7}@abc-def$' as is_match;
+----------+
| is_match |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> select 'ABCDE/+12346543210@abc-def' regexp 
  '^ABCDE/\\+1(123|234|345|456)[0-9]{7}@abc-def$' as is_match;
+----------+
| is_match |
+----------+
|        1 |
+----------+

Я не знаю, почему у вас в шаблоне регулярных выражений \\, потому что это не соответствует строке примера.

Я не уверен, о чем ваши тройные цифры. Это телефонные коды? Вы планируете перечислить каждый код города?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...