Các yếu tố đối chiếu thường được tham chiếu trong bối cảnh sắp xếp.
Trong nhiều ngôn ngữ, đối chiếu (sắp xếp như trong từ điển) không chỉ được thực hiện cho mỗi ký tự. Ví dụ, bằng tiếng Séc, ch
không sắp xếp giữa cg
và ci
giống như tiếng Anh, nhưng được coi là toàn bộ để sắp xếp. Đây là một yếu tố đối chiếu (chúng ta không thể đề cập đến một nhân vật ở đây, nhân vật là một tập hợp con của các yếu tố đối chiếu) sắp xếp ở giữa h
và i
.
Bây giờ bạn có thể hỏi, những gì có liên quan đến biểu thức thông thường? , Tại sao tôi muốn tham chiếu đến một phần tử đối chiếu trong biểu thức ngoặc? .
Vâng, bên trong biểu thức khung, người ta không sử dụng thứ tự. Chẳng hạn [c-j]
, bạn muốn các ký tự ở giữa c
và j
. Vâng, phải không? Bạn muốn có các yếu tố đối chiếu ở đó. [h-i]
trong một trận địa phương Séc ch
:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[h-i]o'
cho
Vì vậy, nếu bạn có thể liệt kê một loạt các yếu tố đối chiếu trong biểu thức khung, thì bạn cũng có thể liệt kê chúng một cách riêng lẻ. [a-cch]
sẽ phù hợp với các yếu tố đối chiếu ở giữa a
và c
và c
và h
ký tự. Để có a-c
và ch
phần tử đối chiếu, chúng ta cần một cú pháp mới:
$ echo cho | LC_ALL=cs_CZ.UTF-8 grep '^[a-c[.ch.]]o'
cho
(những người ở giữa a
và c
và ch
một).
Bây giờ, thế giới vẫn chưa hoàn hảo và có lẽ sẽ không bao giờ. Ví dụ trên là trên một hệ thống GNU và đã hoạt động. Một ví dụ khác về yếu tố đối chiếu có thể là e
với giọng kết hợp cấp tính trong UTF-8 ( $'e\u0301'
được hiển thị như $'\u00e9'
là é
).
é và é là cùng một nhân vật ngoại trừ một người được đại diện với một nhân vật và người kia có hai nhân vật.
$ echo $'e\u301t\ue9' | grep '^[d-f]t'
Sẽ hoạt động đúng trên một số hệ thống nhưng không phải hệ thống khác (chẳng hạn như GNU). Và không rõ là $'[[.\ue9.]]'
chỉ nên khớp $'\ue9'
hay cả hai $'\ue9'
và $'e\u301'
.
Không đề cập đến các tập lệnh không phải là chữ cái hoặc các tập lệnh với các thứ tự sắp xếp theo khu vực, khác nhau, những thứ như ( ffi
trong một ký tự) trở nên khó xử lý với API đơn giản như vậy.
ch
là hai nhân vật khác nhau; nó chỉ được coi là một cho mục đích phân loại. Bạn có chắc chắn "digraph" là một thuật ngữ áp dụng?