2012-03-29 24 views

Trả lời

6

mô tả của trang web là khá tốt:

\ X Trận một grapheme Unicode duy nhất, cho dù mã hóa như là một điểm mã duy nhất hoặc nhiều điểm mã sử dụng dấu cách kết hợp. Một grapheme gần giống nhất với khái niệm hàng ngày của một "nhân vật". \ X phù hợp à mã hóa như U + 0061 U + 0300, à mã hóa như U + 00E0, © vv

Vì vậy, điều mà làm cho nó Unicode-aware là nó có thể phù hợp với vài điểm mã khi chúng kết hợp với một "điều" có thể nhìn thấy được (grapheme).

Xem Wikipedia's page on Combining Characters để biết thêm chi tiết, ví dụ: liệt kê tên mã U + 0300 được đề cập ở trên, chẳng hạn.

2

Từ Perl regex manual:

này phù hợp với Unicode mở rộng grapheme cụm.

\X khớp khá cũng việc sử dụng bình thường (không lập trình Unicode) sẽ xem xét một ký tự đơn . Ví dụ: hãy xem xét G có một số loại dấu là dấu phẩy là , chẳng hạn như mũi tên. Không có ký tự đơn như vậy trong mã vạch , nhưng có thể được tạo bằng cách sử dụng dấu G theo sau là Unicode "TIỀN TỚI LÊN TIẾP THEO DƯỚI", và sẽ được hiển thị bằng phần mềm nhận biết Unicode như thể nó là một ký tự đơn.

Chú thích: ký tự Unicode được sửa đổi.

Và từ PCRE man pages (2012):

PCRE thực hiện một phiên bản đơn giản của \ X hơn Perl, mà thay đổi để làm cho trận đấu \ X gì Unicode gọi là một "đại gia cụm grapheme". Điều này phức tạp hơn chuỗi Unicode mở rộng, là kết quả phù hợp với PCRE.

[...]

\ X một chuỗi Unicode mở rộng

[...]

Cuộc vượt biên \ X phù hợp với bất kỳ số lượng các ký tự Unicode mà tạo thành một mở rộng Chuỗi Unicode.\ X tương đương với

(?>\PM\pM*) 

Nghĩa là, nó phù hợp với một nhân vật mà không có "dấu ấn" bất động sản, tiếp theo không hoặc nhiều ký tự với "dấu ấn" bất động sản, và xử lý chuỗi như một nhóm nguyên tử (xem bên dưới). Các ký tự có thuộc tính "đánh dấu" thường là dấu trọng âm ảnh hưởng đến ký tự trước . Không ai trong số họ có codepoints ít hơn 256, do đó, trong 8-bit không UTF-8 chế độ \ X phù hợp với bất kỳ một nhân vật.

Lưu ý rằng các phiên bản gần đây của Perl đã thay đổi \ X để khớp với những gì Unicode gọi là "cụm grapheme mở rộng", có định nghĩa phức tạp hơn .

phiên bản sau của PCRE man pages (2015):

cụm grapheme Extended

Các \X thoát phù hợp với bất kỳ số lượng các ký tự Unicode hình thành một "mở rộng cụm grapheme", và xử lý các chuỗi như một nhóm nguyên tử (xem bên dưới). Lên đến và bao gồm cả phiên bản 8.31, PCRE phù hợp một lier bấm lỗ tai, định nghĩa đơn giản đó là tương đương với

(?>\PM\pM*) 

Nghĩa là, nó xuất hiện một nhân vật mà không có "dấu ấn" bất động sản, tiếp theo không hoặc nhiều ký tự với thuộc tính "đánh dấu". Các ký tự có thuộc tính "nhãn hiệu" thường không có dấu cách dấu trọng âm ảnh hưởng đến ký tự trước đó.

định nghĩa đơn giản này đã được mở rộng trong Unicode để bao gồm nhiều loại phức tạp vốn dĩ của nhân vật tổng hợp bằng cách cho mỗi nhân vật một bất động sản phá vỡ grapheme, và tạo ra quy tắc sử dụng các thuộc tính để xác định ranh giới của mở rộng grapheme cụm. Trong bản phát hành PCRE sau 8.31, \X khớp với một trong số các cụm này.

\X luôn khớp với ít nhất một ký tự. Sau đó, nó quyết định liệu để thêm ký tự bổ sung theo các quy tắc sau đây để kết thúc một cụm:

  1. End ở phần cuối của chuỗi chủ đề.

  2. Không kết thúc giữa CR và LF; nếu không kết thúc sau khi bất kỳ kiểm soát char- acter.

  3. Đừng phá vỡ chuỗi âm tiết Hangul (tập lệnh tiếng Hàn). Các ký tự Hangul có năm loại: L, V, T, LV và LVT. Một ký tự L có thể được theo sau bởi ký tự L, V, LV hoặc LVT; ký tự LV hoặc V có thể được theo sau bởi ký tự V hoặc T; một ký tự LVT hoặc T có thể chỉ được gửi bằng ký tự T.

  4. Không kết thúc trước khi mở rộng ký tự hoặc dấu cách. Các ký tự có thuộc tính "nhãn hiệu" luôn có thuộc tính phá vỡ đồ thị "mở rộng" .

  5. Không kết thúc sau khi ký tự thêm.

  6. Nếu không, hãy kết thúc cụm.

Các vấn đề liên quan