Да, используйте REGEXP
(или RLIKE
), но следите за распространенной ошибкой регулярного выражения в поиске конца нужного "токена" в качестве обычного класса отрицательных символов, такого как [^A-Za-z0-9]
- вместо этого используйте конструкцию соответствия «конец слова» нулевой ширины [[:>:]]
(механизм Perl и другие вдохновляющие регулярные выражения известны как \b
).
Класс отрицанных символов не соответствует в конце строки:
mysql> SELECT 'I am @sam' REGEXP '@sam[^A-Za-z0-9]' AS "Does This Match?";
+------------------+
| Does This Match? |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
, где совпадение границы слова успешно выполняется:
mysql> SELECT 'I am @sam' REGEXP '@sam[[:>:]]' AS "Does This Match?";
+------------------+
| Does This Match? |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
Если [[:>:]]
не совсем подходит для вашего приложения (поскольку ваш набор символов "username" не является тем, что движок MySQL рассматривает как одну из сторон границы слова в вашей локали), вы можете, в качестве альтернативы, указать класс отрицанных символов и отдельно тест для конца строки:
SELECT ... WHERE (feed REGEXP '@sam[^A-Za-z0-9]' or feed REGEXP '@sam$')