Trong MySQL, REGEXP_INSTR()
hàm trả về chỉ mục bắt đầu của một chuỗi con phù hợp với mẫu biểu thức chính quy.
Chỉ mục bắt đầu từ 1
. Nếu không có kết quả phù hợp, kết quả là 0
.
Cú pháp
Cú pháp như sau:
REGEXP_INSTR (expr, pat [, pos [,osystem [, return_option [, match_type]]]])
Ở đâu expr
là chuỗi đầu vào và pat
là mẫu biểu thức chính quy cho chuỗi con.
pos
tùy chọn đối số cho phép bạn chỉ định một vị trí trong chuỗi để bắt đầu tìm kiếm. Nếu bị bỏ qua, nó bắt đầu ở vị trí 1.
occurrence
tùy chọn đối số cho phép bạn chỉ định vị trí xuất hiện của kết quả phù hợp để tìm kiếm. Nếu bỏ qua, lần xuất hiện đầu tiên sẽ được sử dụng (lần xuất hiện 1).
return_option
tùy chọn đối số cho phép bạn chỉ định loại vị trí cần trả về. Nếu bạn sử dụng 0
, nó sẽ trả về vị trí của ký tự đầu tiên trong chuỗi con phù hợp. Nếu bạn sử dụng 1
nó trả về vị trí của ký tự đầu tiên theo sau chuỗi con phù hợp. Nếu bị bỏ qua, giá trị là 0
.
match_type
tùy chọn đối số cho phép bạn tinh chỉnh biểu thức chính quy. Ví dụ:bạn có thể sử dụng đối số này để chỉ định đối sánh phân biệt chữ hoa chữ thường hay không.
Ví dụ 1 - Cách sử dụng cơ bản
Đây là một ví dụ cơ bản:
SELECT REGEXP_INSTR ('Cat', 'at') Kết quả;
Kết quả:
+ -------- + | Kết quả | + -------- + | 2 | + -------- +
Trong trường hợp này, có một kết quả khớp và chuỗi con bắt đầu ở vị trí 2.
Ví dụ 2 - Không phù hợp
Dưới đây là một ví dụ mà không có kết quả phù hợp nào:
Kết quảSELECT REGEXP_INSTR ('Cat', '^ at');
Kết quả:
+ -------- + | Kết quả | + -------- + | 0 | + -------- +
Không có kết quả phù hợp nào nên kết quả là 0
. Không có kết quả phù hợp nào vì tôi đã chỉ định rằng chuỗi phải bắt đầu bằng chuỗi con.
Hãy thay đổi nó để nó không bắt đầu với chuỗi con đó:
SELECT REGEXP_INSTR ('at', '^ at') Kết quả;
Kết quả:
+ -------- + | Kết quả | + -------- + | 1 | + -------- +
Ví dụ 3 - pos
Đối số
Dưới đây là một ví dụ về việc chỉ định vị trí bắt đầu:
SELECT REGEXP_INSTR ('Cat Cat', 'Cat', 2) Kết quả;
Kết quả:
+ -------- + | Kết quả | + -------- + | 5 | + -------- +
Vì vậy, chúng tôi nhận được chỉ số của lần xuất hiện thứ hai.
Lưu ý rằng chỉ số vẫn bắt đầu đếm từ vị trí 1 bất kể bạn chỉ định vị trí bắt đầu ở đâu.
Ví dụ sau minh chứng rõ ràng hơn điều này:
SELECT REGEXP_INSTR ('Cat Cat', 'Cat', 2) AS 'Pos 2', REGEXP_INSTR ('Cat Cat', 'Cat', 3) AS 'Pos 3', REGEXP_INSTR ('Cat Cat', ' Cat ', 5) AS' Pos 5 ';
Kết quả:
+ ------- + ------- + ------- + | Vị trí 2 | Vị trí 3 | Bài 5 | + ------- + ------- + ------- + | 5 | 5 | 5 | + ------- + ------- + ------- +
Tất nhiên, tùy thuộc vào mẫu regex của bạn, điều này có thể trả về chỉ mục của các chuỗi con hoàn toàn khác nhau. Ví dụ:
SELECT REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1) 'Pos 1', REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 2) 'Pos 2 ', REGEXP_INSTR (' Thành phố Mèo thật dễ thương! ',' C.t ', 6)' Vị trí 6 ';
Kết quả:
+ ------- + ------- + ------- + | Vị trí 1 | Vị trí 2 | Bài 6 | + ------- + ------- + ------- + | 1 | 5 | 16 | + ------- + ------- + ------- +
Chúng tôi có thể kiểm tra các chuỗi con bằng REGEXP_SUBSTR()
chức năng:
SELECT REGEXP_SUBSTR ('Cat City is SO Cute!', 'C.t', 1) 'Pos 1', REGEXP_SUBSTR ('Cat City is SO Cute!', 'C.t', 2) 'Pos 2 ', REGEXP_SUBSTR (' Thành phố Mèo thật dễ thương! ',' C.t ', 6)' Vị trí 6 ';
Kết quả:
+ ------- + ------- + ------- + | Vị trí 1 | Vị trí 2 | Bài 6 | + ------- + ------- + ------- + | Con mèo | Cit | Cắt | + ------- + ------- + ------- +
Ví dụ 4 - occurrence
Đối số
Dưới đây là một ví dụ về việc sử dụng occurrence
lý lẽ. Trong mọi trường hợp, chúng tôi bắt đầu ở vị trí 1:
SELECT REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1, 1) 'Lần xuất hiện 1', REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1, 2 ) 'Sự kiện 2', REGEXP_INSTR ('Thành phố Mèo thật dễ thương!', 'C.t', 1, 3) 'Sự kiện 3';
Kết quả:
+ -------------- + -------------- + -------------- + | Sự xuất hiện 1 | Sự xuất hiện 2 | Xảy ra 3 | + -------------- + -------------- + -------------- + | 1 | 5 | 16 | + -------------- + -------------- + -------------- +Tuy nhiên, nếu chúng ta bắt đầu ở một vị trí khác, kết quả sẽ khác:
SELECT REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 2, 1) 'Lần xuất hiện 1', REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 2, 2 ) 'Sự kiện 2', REGEXP_INSTR ('Thành phố Mèo thật dễ thương!', 'C.t', 2, 3) 'Sự kiện 3';Kết quả:
+ -------------- + -------------- + -------------- + | Sự xuất hiện 1 | Sự xuất hiện 2 | Xảy ra 3 | + -------------- + -------------- + -------------- + | 5 | 16 | 0 | + -------------- + -------------- + -------------- +Điều này xảy ra vì vị trí xuất phát của chúng tôi đến sau lần xuất hiện đầu tiên bắt đầu. Do đó, lần xuất hiện 2 trở thành lần xuất hiện 1 và lần xuất hiện 3 trở thành lần xuất hiện 2. Và bởi vì không có lần xuất hiện nào nữa, kết quả của lần xuất hiện 3 là âm (tức là không có lần xuất hiện 3).
Ví dụ 5 -
return_option
Đối sốĐây là một ví dụ về việc sử dụng
return_option
đối số:SELECT REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'Option 0', REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1 , 1, 1) 'Tùy chọn 1';Kết quả:
+ ---------- + ---------- + | Tùy chọn 0 | Phương án 1 | + ---------- + ---------- + | 1 | 4 | + ---------- + ---------- +Tùy chọn 0 trả về ký tự đầu tiên của chuỗi con phù hợp. Tùy chọn 1 đã trả lại vị trí theo sau chuỗi con phù hợp.
Đây là giao diện của nó nếu chúng ta áp dụng nó vào ví dụ trước:
SELECT REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1, 1, 0) 'Lần xuất hiện 1', REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1 , 2, 0) 'Lần xuất hiện 2', REGEXP_INSTR ('Thành phố Mèo thật dễ thương!', 'C.t', 1, 3, 0) 'Lần xuất hiện 3'UNION ALLSELECT REGEXP_INSTR (' Thành phố Mèo thật dễ thương! ', 'C.t', 1, 1, 1), REGEXP_INSTR ('Cat City is SO Cute!', 'C.t', 1, 2, 1), REGEXP_INSTR ('Cat City is SO Cute!', 'C .t ', 1, 3, 1);Kết quả:
+ -------------- + -------------- + -------------- + | Sự xuất hiện 1 | Sự xuất hiện 2 | Xảy ra 3 | + -------------- + -------------- + -------------- + | 1 | 5 | 16 || 4 | 8 | 19 | + -------------- + -------------- + -------------- +Trong trường hợp này, chúng tôi đã thực hiện một tập hợp bằng cách sử dụng tùy chọn 0 và một bộ khác sử dụng tùy chọn 1, sau đó kết hợp chúng lại với nhau bằng cách sử dụng
UNION ALL
.Ví dụ 6 -
match_type
Đối sốBạn có thể cung cấp một đối số bổ sung để xác định loại đối sánh. Điều này cho phép bạn chỉ định những thứ như kết hợp có phân biệt chữ hoa chữ thường hay không, có bao gồm dấu chấm cuối dòng hay không, v.v.
Dưới đây là ví dụ về cách chỉ định đối sánh phân biệt chữ hoa chữ thường và không phân biệt chữ hoa chữ thường:
SELECT REGEXP_INSTR ('Cat City is SO Cute!', 'c.t', 1, 1, 0, 'c') 'Phân biệt chữ hoa chữ thường', REGEXP_INSTR ('Cat City is SO Cute!', 'c .t ', 1, 1, 0,' i ')' Phân biệt chữ hoa chữ thường ';Kết quả:
+ ---------------- + ------------------ + | Phân biệt chữ hoa chữ thường | Phân biệt chữ hoa chữ thường | + ---------------- + ------------------ + | 0 | 1 | + ---------------- + ------------------ +
match_type
đối số có thể chứa các ký tự sau:
-
c
- Đối sánh phân biệt chữ hoa chữ thường.
-
i
- Đối sánh không phân biệt chữ hoa chữ thường.
-
m
- Chế độ nhiều dòng. Nhận ra các đầu cuối dòng trong chuỗi. Hành vi mặc định là chỉ đối sánh với các dấu cuối dòng ở đầu và cuối của biểu thức chuỗi.
-
n
-
.
ký tự khớp với các ký tự kết thúc dòng. Giá trị mặc định là cho.
khớp để dừng ở cuối dòng. -
u
- Kết thúc dòng chỉ Unix. Chỉ ký tự dòng mới được nhận dạng là một dòng kết thúc bằng
.
,^
và$
so khớp các toán tử.