Regex pattern '^[^ ]+([ ][^ ]+){N-1}$' khớp chuỗi có đúng N từ phân cách bởi dấu cách đơn.
Ví dụ: Tìm chuỗi có đúng 2 từ
Pattern: '^[^ ]+ [^ ]+$' (từ 1 + space + từ 2, không có space đầu/cuối).
Tạo bảng:
CREATE TABLE DemoTable1412 (Name VARCHAR(40));
INSERT INTO DemoTable1412 VALUES
('John Adam Carol'), ('Mike Sam'), ('Chris James Robert');
Truy vấn:
SELECT * FROM DemoTable1412 WHERE Name REGEXP '^[^ ]+ [^ ]+$';
Kết quả
| Name |
|---|
| Mike Sam |
Giải thích pattern
^: Bắt đầu chuỗi.[^ ]+: 1 hoặc nhiều ký tự KHÔNG PHẢI space (từ đầu tiên).: Một dấu cách đơn.[^ ]+: Từ thứ hai.$: Kết thúc chuỗi.
Pattern tổng quát cho N từ
^[^ ]+( [^ ]+){N-1}$
- N=1:
^[^ ]+$ - N=2:
^[^ ]+ [^ ]+$ - N=3:
^[^ ]+( [^ ]+){2}$ - N=4:
^[^ ]+( [^ ]+){3}$
⚠️ Hạn chế
- Chỉ xử lý dấu cách đơn (
). Không khớp tab, nhiều space, newline. - Cải tiến:
^[^[:space:]]+([[:space:]]+[^[:space:]]+){N-1}$(dùng POSIX class[:space:]). - Không xử lý tốt Unicode space.
MySQL 8.0+: REGEXP_SUBSTR đếm từ
SELECT Name,
(LENGTH(Name) - LENGTH(REPLACE(Name, ' ', '')) + 1) AS word_count
FROM DemoTable1412
HAVING word_count = 2;
Cách này đơn giản hơn: đếm số space + 1 = số từ (giả sử 1 space giữa các từ).