大概两年前,在 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 列别表。把一些常用的类别和命名块列举如下:
| 类别 | 描述 |
|---|---|
| Ll | 小写字母 |
| Lu | 大写字母 |
| Lt | 首字母大写字母 |
| Lo | 其他字母(注音字母、表意文字等) |
| L | 字母,== Lu | Ll | Lt | Lm | Lo |
| Sm | 数学符号 |
| Sc | 货币符号 |
比较遗憾的是,目前还没有专门的 Emoji
类别。因此,目前如果你想匹配 Emoji 表情的话,还是需要写 Unicode 范围表达式,诸如 [/x{1F600}-/x{1F6FF}|[/x{2600}-/x{26FF}]
,来匹配表情符号。
| 名称 | 描述 |
|---|---|
| Greek | 希腊语 |
| Han | 汉语 |
| Tibetan | 藏语 |
| Thai | 泰语 |
| Latin | 拉丁语 |
| Hebrew | 希伯来语 |