在 Golang Regexp 中匹配多个 unicode 字符
Matching multiple unicode characters in Golang Regexp
作为一个简化的例子,我想让 ^⬛+$
与 ⬛⬛⬛
匹配以产生 ⬛⬛⬛
.
的查找匹配
r := regexp.MustCompile("^⬛+$")
matches := r.FindString("⬛️⬛️⬛️")
fmt.Println(matches)
但它没有成功匹配,即使这可以用于常规 ASCII 字符。
我猜我对 Unicode 匹配有些不了解,但我还没有在文档中找到任何合适的解释。
谁能解释一下这个问题?
正则表达式匹配包含一个或多个⬛(黑色方框)的字符串。
主题字符串是三对黑色方框和 variation selector-16。变体选择器是不可见的(在我的终端上)并阻止匹配。
通过从主题字符串中删除变体选择器或将变体选择器添加到模式来修复。
您需要考虑字符串中的所有字符。如果你 analyze the string 你会看到它包含:
因此您需要一个正则表达式来匹配包含一个或多个 \x{2B1B}
和 \x{FE0F}
字符组合的字符串,直到字符串结尾。
所以你需要使用
^(?:\x{2B1B}\x{FE0F})+$
参见regex demo。
请注意,您可以使用 \p{M}
来匹配任何变音符号:
^(?:\x{2B1B}\p{M})+$
参见 Go demo:
package main
import (
"fmt"
"regexp"
)
func main() {
r := regexp.MustCompile(`^(?:\x{2B1B}\x{FE0F})+$`)
matches := r.FindString("⬛️⬛️⬛️")
fmt.Println(matches)
}
作为一个简化的例子,我想让 ^⬛+$
与 ⬛⬛⬛
匹配以产生 ⬛⬛⬛
.
r := regexp.MustCompile("^⬛+$")
matches := r.FindString("⬛️⬛️⬛️")
fmt.Println(matches)
但它没有成功匹配,即使这可以用于常规 ASCII 字符。
我猜我对 Unicode 匹配有些不了解,但我还没有在文档中找到任何合适的解释。
谁能解释一下这个问题?
正则表达式匹配包含一个或多个⬛(黑色方框)的字符串。
主题字符串是三对黑色方框和 variation selector-16。变体选择器是不可见的(在我的终端上)并阻止匹配。
通过从主题字符串中删除变体选择器或将变体选择器添加到模式来修复。
您需要考虑字符串中的所有字符。如果你 analyze the string 你会看到它包含:
因此您需要一个正则表达式来匹配包含一个或多个 \x{2B1B}
和 \x{FE0F}
字符组合的字符串,直到字符串结尾。
所以你需要使用
^(?:\x{2B1B}\x{FE0F})+$
参见regex demo。
请注意,您可以使用 \p{M}
来匹配任何变音符号:
^(?:\x{2B1B}\p{M})+$
参见 Go demo:
package main
import (
"fmt"
"regexp"
)
func main() {
r := regexp.MustCompile(`^(?:\x{2B1B}\x{FE0F})+$`)
matches := r.FindString("⬛️⬛️⬛️")
fmt.Println(matches)
}