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

Nat*_*enn 6 regex perl cjk

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

搜索看起来像这样: /[korean characters] \([chinese characters]\)/

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

ike*_*ami 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
Run Code Online (Sandbox Code Playgroud)

要找出给定属性中的哪些字符,可以使用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
...
Run Code Online (Sandbox Code Playgroud)

*- uniprops以及unichars可从统一::厮打发行.