转载

正则表达式中匹配 Unicode 的常用类别和命名块

大概两年前,在 Golang正则表达式使用及简单示例 中提到了在正则表达式中使用 /p{Lu} 来匹配Unicode 类别或 Unicode 块:

package main
 
import (
    "regexp"
 
    "fmt"
)
 
func foo(i int) *int {
    a := i + 1
    return &(a)
}
 
func main() {
    reg := regexp.MustCompile(`/p{Lu}`)
    fmt.Println(reg.MatchString("A"))
}
 

但是,在日常使用的时候经常不知道自己要匹配的那个 Unicode 字符属于拿一个类别。于是翻了一下 Golang 所遵循的 RE2 列别表。把一些常用的类别和命名块列举如下:

常用 Unicode 常规类别

类别 描述
Ll 小写字母
Lu 大写字母
Lt 首字母大写字母
Lo 其他字母(注音字母、表意文字等)
L 字母,== Lu | Ll | Lt | Lm | Lo
Sm 数学符号
Sc 货币符号

比较遗憾的是,目前还没有专门的 Emoji 类别。因此,目前如果你想匹配 Emoji 表情的话,还是需要写 Unicode 范围表达式,诸如 [/x{1F600}-/x{1F6FF}|[/x{2600}-/x{26FF}] ,来匹配表情符号。

常用 Unicode 命名块

名称 描述
Greek 希腊语
Han 汉语
Tibetan 藏语
Thai 泰语
Latin 拉丁语
Hebrew 希伯来语

扩展阅读

  • Unicode 常规类别
  • Unicode 命名块
  • Unicode General Category Values
原文  https://liudanking.com/design-pattern/正则表达式中匹配-unicode-的常用类别和命名块/
正文到此结束
Loading...