Bạn có thể sử dụng đối sánh mẫu chức năng trong Postgres.
Đầu tiên tìm ra một mẫu để nắm bắt mọi thứ lên đến >
thứ tư tính cách.
Để bắt đầu mẫu của bạn, bạn nên tạo một nhóm phụ nắm bắt không phải >
ký tự và một >
nhân vật:
([^>]*>)
Sau đó, chụp lại bốn lần để đến phiên bản thứ tư của >
([^>]*>){4}
Sau đó, bạn sẽ cần phải kết hợp nó trong một nhóm để trận đấu đưa trở lại tất cả bốn trường hợp:
(([^>]*>){4})
và đặt một ký hiệu bắt đầu của chuỗi để có số đo tốt để đảm bảo rằng nó chỉ khớp với từ đầu của Chuỗi (không phải ở giữa):
^(([^>]*>){4})
Đây là một ví dụ regex101 hoạt động về điều đó!
Khi bạn có mẫu sẽ trả về những gì bạn muốn trong phần tử nhóm đầu tiên (mà bạn có thể biết tại regex trực tuyến ở bảng điều khiển bên phải), bạn cần chọn lại nó trong SQL.
Trong Postgres, hàm chuỗi con có tùy chọn sử dụng mẫu regex để trích xuất văn bản ra khỏi đầu vào bằng cách sử dụng câu lệnh 'from' trong chuỗi con.
Để hoàn thành, hãy tập hợp tất cả lại với nhau!
select substring(filter_type from '^(([^>]*>){4})')
from filter_table
Xem sqlfiddle đang hoạt động tại đây
Nếu bạn muốn đối sánh toàn bộ chuỗi bất cứ khi nào có ít hơn bốn phiên bản của >
, sử dụng biểu thức chính quy này:
^(([^>]*>){4}|.*)