Có hai cách để thực hiện điều đó. Theo khối (\p{Block=...}
) và theo tập lệnh (\p{Script=...}
). Sau này có lẽ là tự nhiên hơn.
Tôi không biết nhiều về ngôn ngữ Trung Quốc, nhưng tôi nghĩ bạn muốn \p{Script=Han}
aka \p{Han}
cho tiếng Trung.
Nhật sử dụng ba kịch bản:
- Kanij:
\p{Script=Han}
aka \p{Han}
- Hiragana:
\p{Script=Hiragana}
aka \p{Hiragana}
aka \p{Hira}
- Katakana:
\p{Script=Katakana}
aka \p{Katakana}
aka \p{Kana}
Bạn có thể mất một xem perluniprops để tìm cái bạn đang tìm kiếm hoặc bạn có thể sử dụng uniprops
* để tìm những thuộc tính nào khớp với một ký tự cụ thể.
$ uniprops 4E2D
U+4E2D ‹中› \N{CJK UNIFIED IDEOGRAPH-4E2D}
\w \pL \p{L_} \p{Lo}
All Any Alnum Alpha Alphabetic Assigned InCJK_UnifiedIdeographs
CJK_Unified_Ideographs L Lo Gr_Base Grapheme_Base Graph GrBase
Han Hani ID_Continue IDC ID_Start IDS Ideo Ideographic Letter
L_ Other_Letter Print UIdeo Unified_Ideograph Word XID_Continue
XIDC XID_Start XIDS X_POSIX_Alnum X_POSIX_Alpha X_POSIX_Graph
X_POSIX_Print X_POSIX_Word
Để tìm ra ký tự nào trong một thuộc tính nhất định, bạn có thể sử dụng unichars
*. (Đây là tính hữu hạn chế vì hầu hết các ký tự CJK không được đặt tên.)
$ unichars -au '\p{Han}'
⺀ U+2E80 CJK RADICAL REPEAT
⺁ U+2E81 CJK RADICAL CLIFF
⺂ U+2E82 CJK RADICAL SECOND ONE
⺃ U+2E83 CJK RADICAL SECOND TWO
⺄ U+2E84 CJK RADICAL SECOND THREE
⺅ U+2E85 CJK RADICAL PERSON
⺆ U+2E86 CJK RADICAL BOX
⺇ U+2E87 CJK RADICAL TABLE
⺈ U+2E88 CJK RADICAL KNIFE ONE
...
* — uniprops
và unichars
có sẵn từ các distro Unicode::Tussle.
[Điều này] (http://stackoverflow.com/questions/4611425/how-to-count-the-chinese-word-in-a-file-using-regex-in-perl) có vẻ hữu ích. – TLP
Liên quan: http://stackoverflow.com/questions/6937087/detect-chinese-character-using-perl#6939500 – daxim