Tôi có một tập tin gọi là trường của tôi
trường, chứa chuỗi sau:
{'Ngôn ngữ-Nội dung': 'en', 'Tùy chọn-Khung-X': 'SAMEORIGIN', 'X-Generator': 'Drupal 7 (http://drupal.org)', 'Liên kết': '; rel="shortlink"', 'Some-Header-Key': 'max-age=31; addSomething', 'Mã hóa-Nội dung': 'gzip'}
Tôi muốn chụp'Some-Header-Key': 'max-age=31; thêmSomething'
Trong số đó: 1) 'Một số-Tiêu-đề-Khóa'
、tuổi tối đa
là một giá trị cố định phải luôn tồn tại.
2) thêmCái gì đó
là tùy chọn.
3) Có thể có một hoặc nhiều dấu cách giữa dấu hai chấm kép và dấu bằng
4) Dạng chung là 'key': 'value', với dấu ngoặc đơn hoặc dấu ngoặc kép.
5) ([^""|'])*
Biểu thị: 0 hoặc nhiều ký tự không phải là dấu ngoặc đơn hoặc dấu ngoặc kép. Việc này là để nắm bắt thêmCái gì đó
。
Tôi đã viết truy vấn này:
chọn trường của tôi
từ mytable
trong đó mycol regexp "('|"")Some-Header-Key('|"")\s*:\s*('|"")([^""|'])*max-age\s*=\s*[0-9]+([^""|'])*('|"")";
Nhưng nó không trả lại bất cứ điều gì! trường của tôi
Chứa chuỗi ví dụ ở trên.
Khi tôi sao chép giá trị trường vào một tệp văn bản bên ngoài và đặt nó vào va li
Khi chạy biểu thức chính quy trong , biểu thức chính quy sẽ ghi lại chuỗi một cách chính xác.
Có chuyện gì với MySQL vậy? Tôi đang sử dụng MySQL Workbench 8.0 trong Ubuntu 18.04.
Vấn đề của bạn nằm ở biểu thức chính quy \S
. Các phiên bản trước MySQL 8 không hỗ trợ ký hiệu này, bạn cần sử dụng các lớp ký tự [:trống:]
thay vì
trong đó mycol regexp "('|"")Some-Header-Key('|"")[[:blank:]]*:[[:blank:]]*('|"")([^""|'])*max-age[[:blank:]]*=[[:blank:]]*[0-9]+([^""|'])*('|"")"
Trong MySQL 8 bạn có thể sử dụng \S
Nhưng bạn cần thoát dấu gạch chéo ngược vì MySQL sử dụng cú pháp thoát kiểu C trong chuỗi, vì vậy \S
Chỉ cần chuyển đổi thànhS
. Vì vậy, nó sẽ \S
Thay đổi thành \\S
Nó sẽ hoạt động:
trong đó mycol regexp "('|"")Some-Header-Key('|"")\\s*:\\s*('|"")([^""|'])*max-age\\s*=\\s*[0-9]+([^""|'])*('|"")"
Bản demo trên dbfiddle
Tôi là một lập trình viên xuất sắc, rất giỏi!