Perl正则表达式从任意集中找到字符

时间:2012-01-24 00:00:50

标签: regex perl cjk

我有一个包含韩文和中文字符的文件。我想找到使用括号语句来对韩语单词进行hanja的对,如下所示:한문(汉文)

搜索结果如下:/[korean characters] \([chinese characters]\)/

如何指定中文或韩文字符,或其他任何设置,例如西里尔文或泰文?

1 个答案:

答案 0 :(得分:9)

Unicode提供用于标识脚本字符所属的属性。可以使用\p{Script=...}基于脚本属性匹配字符。

我对你提到的语言知之甚少,但我认为你想要

  • \p{Script=Han}又名\p{Han}为中文。
  • \p{Script=Hangul}又称\p{Hangul}为韩语。
  • \p{Script=Cyrillic}又名\p{Cyrl}代表西里尔语。
  • \p{Script=Thai}又称\p{Thai}为泰语。

您可以查看perluniprops找到您要查找的那个,或者您可以使用uniprops *来查找与特定字符匹配的属性。

$ uniprops D55C
U+D55C ‹한› \N{HANGUL SYLLABLE HAN}
    \w \pL \p{L_} \p{Lo}
    All Any Alnum Alpha Alphabetic Assigned InHangulSyllables L Lo
    Gr_Base Grapheme_Base Graph GrBase Hang Hangul Hangul_Syllables
    ID_Continue IDC ID_Start IDS Letter L_ Other_Letter Print Word
    XID_Continue XIDC XID_Start XIDS X_POSIX_Alnum X_POSIX_Alpha
    X_POSIX_Graph X_POSIX_Print X_POSIX_Word

要找出给定媒体资源中的哪些字符,您可以使用unichars *。 (这个用途有限,因为大多数CJK字符都没有命名。)

$ 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
...

$ unichars -au '\p{Hangul}'
 ᄀ U+01100 HANGUL CHOSEONG KIYEOK
 ᄁ U+01101 HANGUL CHOSEONG SSANGKIYEOK
 ᄂ U+01102 HANGUL CHOSEONG NIEUN
 ᄃ U+01103 HANGUL CHOSEONG TIKEUT
 ᄄ U+01104 HANGUL CHOSEONG SSANGTIKEUT
...

* - unipropsunichars可从Unicode::Tussle发行版中获取。