Если я сравниваю строку, используя REGEXP '[a-zA-Z]'
, она совпадает, если любой символ в строке соответствует букве в этом регулярном выражении. Строка, которую вы показываете, содержит буквы типа a, r, n, i, g, s. Любого из них достаточно, чтобы удовлетворить сравнение с REGEXP.
mysql> select 'Еarnings on thе Intеrnet from' REGEXP '[a-zA-Z]' as ok;
+----+
| ok |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
Отрицание NOT REGEXP
совпадает с NOT (expr REGEXP pattern)
. Он просто меняет результат 1 на 0 или 0 на 1.
mysql> select 'Еarnings on thе Intеrnet from' NOT REGEXP '[a-zA-Z]' as ok;
+----+
| ok |
+----+
| 0 |
+----+
Вы сказали, что хотите сопоставить имена, которые не содержат букв. Я думаю, что вы имеете в виду, что вы хотите сопоставить имена, содержащие любые символы, которые не являются буквами, что является другим тестом.
mysql> select 'Еarnings on thе Intеrnet from' REGEXP '[^a-zA-Z]' as ok;
+----+
| ok |
+----+
| 1 |
+----+
Символы Ð • µ не находятся в диапазоне [a-zA-Z]
и путь к express дополнительному диапазону символов заключается в использовании [^a-zA-Z]
. То есть с символом ^
в квадратных скобках символ будет соответствовать, если он НЕ является одним из символов в этом диапазоне.
См. Также https://dev.mysql.com/doc/refman/8.0/en/regexp.html#regexp -синтаксис в разделе пункт:
Ваш комментарий:
Я проверил проверку на наличие указанных вами символов, включая пробел, апостроф, точку и da sh:
mysql> select 'Mr. Tim O''Toole' regexp '[^a-zA-Z \'.-]' as ok;
+----+
| ok |
+----+
| 0 |
+----+
mysql> select 'Mr. Tim $ O''Toole' regexp '[^a-zA-Z \'.-]' as ok;
+----+
| ok |
+----+
| 1 |
+----+
Вам не нужно ставить бэкслу sh перед -
, но это должно быть обработано специально:
Чтобы включить буквальный символ, он должен быть написан первым или последним.
Это в документации, которую я связал к.