使用正则表达式匹配任意utf-8编码的汉字

问题描述 投票:0回答:6

比如我想将由

m
组成的字符串匹配到
n
汉字,那么我可以使用:

[single Chinese character regular expression]{m,n}

有没有单个汉字的正则表达式,可以是任何存在的汉字?

regex unicode flex-lexer non-english
6个回答
51
投票

匹配中文(好吧,CJK)字符的正则表达式是

\p{script=Han}

可以简单理解为

\p{Han}

这假设您的正则表达式编译器满足 要求 RL1.2 UTS#18 Unicode 正则表达式的属性。 Perl 和 Java 7 都满足该规范,但许多其他语言不满足。


7
投票

在爪哇,

\p{InCJK_UNIFIED_IDEOGRAPHS}{1,3}

6
投票

在 C# 中

new Regex(@"\p{IsCJKUnifiedIdeographs}")

它位于 Microsoft 文档

以下是来自维基百科的更多信息:CJK 统一表意文字

名为“中日韩统一表意文字”(4E00–9FFF) 的基本块包含 U+4E00 到 U+9FEF 范围内的 20,976 个基本汉字。该块不仅包括中文书写系统中使用的字符,还包括日语书写系统中使用的汉字和汉字(汉字在韩国的使用正在减少)。该块中的许多字符在所有三种书写系统中都使用,而其他字符仅在三种书写系统中的一种或两种中使用。越南的 Nôm 文字也使用汉字(现已废弃)。


3
投票
对于大多数编程语言来说,匹配99.9%以上的汉字的正则表达式是:

\u4E00-\u9FFF

适用于:Python、现代 Javascript、Golang、Rust 但不适用于 PHP

如果您的语言不支持其他答案中的

{Han}
/
{script=Han}
/
{IsCJKUnifiedIdeographs}
等符号,则很有用。

注意:这对应于 CJK 统一表意文字,并包括韩语、日语和越南语等其他语言。


0
投票

在 Java 7 及更高版本中,格式应为:“\p{IsHan}”


-1
投票

就像这样:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    compile, err := regexp.Compile("\\p{Han}") // match one any Chinese character
    if err != nil {
        return
    }
    str := compile.FindString("hello 世界")
    fmt.Println(str) // output: 世
}
© www.soinside.com 2019 - 2024. All rights reserved.