Регулярное выражение может исходить из столбца таблицы, а не быть литералом:
CREATE TABLE regexps (
re VARCHAR(99)
);
INSERT INTO regexps (re)
VALUES ('hii?|hell?o'), ('aloha'), ('bonjour');
SELECT CONCAT('matches ', re)
FROM regexps
WHERE "hi, y'all" REGEXP re;
SELECT CONCAT('matches ', re)
FROM regexps
WHERE "bonjour and aloha" REGEXP re;
SELECT CONCAT('matches ', re)
FROM regexps
WHERE "oops: high" REGEXP re;
...
mysql> SELECT * FROM regexps;
+-------------+
| re |
+-------------+
| hii?|hell?o |
| aloha |
| bonjour |
+-------------+
3 rows in set (0.00 sec)
mysql> SELECT CONCAT('matches ', re)
-> FROM regexps
-> WHERE "hi, y'all" REGEXP re;
+------------------------+
| CONCAT('matches ', re) |
+------------------------+
| matches hii?|hell?o |
+------------------------+
1 row in set (0.01 sec)
mysql> SELECT CONCAT('matches ', re)
-> FROM regexps
-> WHERE "bonjour and aloha" REGEXP re;
+------------------------+
| CONCAT('matches ', re) |
+------------------------+
| matches aloha |
| matches bonjour |
+------------------------+
2 rows in set (0.00 sec)
mysql> SELECT CONCAT('matches ', re)
-> FROM regexps
-> WHERE "oops: high" REGEXP re;
+------------------------+
| CONCAT('matches ', re) |
+------------------------+
| matches hii?|hell?o |
+------------------------+
1 row in set (0.00 sec)
Я хочу сопоставить только привет или привет, или привет, или привет, затем ответьте "Hello There"
re
равно hii?|hell?o
, answer
равно Hello There
. Запрос
SELECT answer FROM regexps WHERE $input REGEXP re LIMIT 1
Я добавляю LIMIT
, потому что может возникнуть ситуация, когда два разных регулярных выражения совпадают.