Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách hoạt động của hàm REGEX_REPLACE () trong MySQL

Trong MySQL, REGEXP_REPLACE() hàm thay thế các lần xuất hiện của chuỗi con trong một chuỗi khớp với mẫu biểu thức chính quy đã cho.

Toàn bộ chuỗi được trả về cùng với các chuỗi thay thế.

Nếu không có kết quả khớp nào (tức là chuỗi đầu vào không chứa chuỗi con), toàn bộ chuỗi được trả về không thay đổi.

Cú pháp

Cú pháp như sau:

REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, 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. repl đối số là chuỗi thay thế.

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, tất cả các lần xuất hiện sẽ được thay thế.

match_type tùy chọn đối số là một chuỗi chỉ định cách thực hiện đối sánh. Điều này 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:

SET @str = 'It was good';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'good', 'great!') 'Result';

Kết quả:

+-----------------+---------------+
| Original String | Result        |
+-----------------+---------------+
| It was good     | It was great! |
+-----------------+---------------+

Trong trường hợp này, có một kết quả khớp và chuỗi được trả về cùng với sửa đổi.

Ví dụ 2 - Nhiều Kết hợp

Theo mặc định, nếu có nhiều kết quả phù hợp trong chuỗi, tất cả chúng sẽ được thay thế:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger') 'Result';

Kết quả:

+---------------------+---------------------------+
| Original String     | Result                    |
+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------------+

Tuy nhiên, bạn cũng có tùy chọn chỉ định sự xuất hiện nào bạn muốn thay thế (thông tin thêm về điều này sau).

Ví dụ 3 - 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:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cow', 'Tiger') 'Result';

Kết quả:

+---------------------+---------------------+
| Original String     | Result              |
+---------------------+---------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat |
+---------------------+---------------------+

Không có kết quả khớp nào, vì vậy chuỗi được trả về không thay đổi.

Ví dụ 4 - pos Đối số

Dưới đây là một ví dụ về việc chỉ định vị trí bắt đầu:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2) 'Result';

Kết quả:

+---------------------+-------------------------+
| Original String     | Result                  |
+---------------------+-------------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Tiger |
+---------------------+-------------------------+

Chúng tôi đã bắt đầu ở vị trí 2, đến sau lần bắt đầu lần xuất hiện đầu tiên, do đó, hoạt động thay thế chỉ ảnh hưởng đến những lần xuất hiện sau lần xuất hiện đầu tiên.

Ví dụ 5 - occurrence Đối số

Như đã đề cập, theo mặc định, tất cả các lần xuất hiện đều được thay thế. Tuy nhiên, bạn cũng có tùy chọn chỉ định một trường hợp cụ thể để thay thế bằng cách sử dụng occurrence lý lẽ. Đây là một ví dụ:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 2) 'Result';

Kết quả:

+---------------------+-----------------------+
| Original String     | Result                |
+---------------------+-----------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Cat |
+---------------------+-----------------------+

Trong trường hợp này, chúng tôi bắt đầu ở vị trí 1. Tuy nhiên, nếu chúng tôi bắt đầu ở một vị trí khác, kết quả sẽ khác:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2, 2) 'Result';

Kết quả:

+---------------------+-----------------------+
| Original String     | Result                |
+---------------------+-----------------------+
| Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Cat |
+---------------------+-----------------------+

Đ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.

Giá trị mặc định cho đối số xuất hiện là 0 , có nghĩa là tất cả các lần xuất hiện đều được thay thế. Nói cách khác, nếu bạn bỏ qua đối số này, tất cả các lần xuất hiện sẽ được thay thế (như chúng ta đã thấy trong các ví dụ trước). Dưới đây là một ví dụ về việc chỉ định rõ ràng tất cả các lần xuất hiện:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 0) 'Result';

Kết quả:

+---------------------+---------------------------+
| Original String     | Result                    |
+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------------+

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:

SET @str = 'Cat Dog Cat Dog Cat';
SELECT 
  @str 'Original String',
  REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'c') 'Case-Sensitive',
  REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'i') 'Case-Insensitive';

Kết quả:

+---------------------+---------------------+---------------------------+
| Original String     | Case-Sensitive      | Case-Insensitive          |
+---------------------+---------------------+---------------------------+
| Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
+---------------------+---------------------+---------------------------+

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 . , ^$ so khớp các toán tử.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa LIKE và =trong MYSQL?

  2. Làm thế nào để chọn từ hai bảng trong MySQL ngay cả khi không phải tất cả các hàng trong một bảng đều có câu trả lời chính trong bảng kia?

  3. Chọn các hàng ngẫu nhiên với MySQL

  4. Hiệu suất toán tử MySQL IN trên số lượng giá trị (lớn?)

  5. Cách thêm ràng buộc not null vào cột hiện có trong MySQL