Tại sao có rất nhiều biến thể biểu thức chính quy? [đóng cửa]


14

Hôm nay khi tôi xem lại mã nguồn dự án của chúng tôi, tôi thấy có rất nhiều "khoảng trắng" và "tab" không cần thiết nằm ở cuối mỗi dòng. Vì vậy, tôi quyết định xóa chúng với biểu thức thông thường.

Tuy nhiên, tôi thấy lệnh sed -i '/\s+$/d'không hoạt động. Cho đến khi tôi thay đổi lệnh thành see -ri '/\s+$/d', nó hoạt động như mong đợi của tôi. Từ hướng dẫn sử dụng sed, nó cho biết -rmở rộng regrec.

Tôi đang bối rối, tại sao có quá nhiều biến thể regrec? Giống như vim / emacs / perl / sed regrec. Tại sao regrec không thể cung cấp giao diện người dùng duy nhất?

Câu trả lời:


19

Vì lý do lịch sử. Không có định nghĩa về cú pháp "Biểu thức chính quy". Bản thân khái niệm biểu thức chính quy không liên quan gì đến cú pháp thực tế mô tả chính thức nó. Mọi người đã đưa ra những cách khác nhau để nói cùng một điều, do đó các kiểu cú pháp regex khác nhau.

Tuy nhiên, bạn sẽ thấy rằng chủ yếu có hai nhóm định nghĩa trong những ngày này:

  1. Biểu thức chính quy POSIX chỉ định Biểu thức cơ bản (BRE) và Biểu thức chính quy mở rộng (ERE). Sự nhầm lẫn bắt đầu khi ví dụ, Biểu thức chính quy cơ bản sử dụng\( \)để biểu thị một nhóm và Biểu thức chính quy mở rộng sử dụng( )cho điều đó.

  2. Biểu thức chính quy dựa trên Perl . Các biểu thức chính quy Perl xác định một cú pháp nhất quán hơn, ví dụ, dấu gạch chéo ngược sẽ luôn thoát khỏi một ký tự không phải là chữ và số. Cú pháp regl Perl được tìm thấy trong nhiều ngôn ngữ lập trình phổ biến hiện nay, từ Java đến Ruby.

Bạn có thể kiểm tra bài viết Wikipedia về cú pháp regex để biết thêm thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.