英文:
regexp find for Chinese unicode character
问题
你好!根据你提供的代码和问题,我可以为你解释一下发生的情况。
首先,你使用了正则表达式来匹配字符串中的汉字。在正则表达式中,\p{Han}
表示匹配一个汉字字符。然后,你使用了不同的量词来限定匹配的次数。
-
\p{Han}*
表示匹配零个或多个汉字字符。这意味着它会匹配空字符串,因为它可以选择不匹配任何汉字字符。所以当你使用这个正则表达式时,它会打印空字符串。 -
\p{Han}+
表示匹配一个或多个汉字字符。这意味着它至少会匹配一个汉字字符。所以当你使用这个正则表达式时,它会打印 "中文哦",因为这是字符串中的一个汉字字符序列。 -
\p{Han}?
表示匹配零个或一个汉字字符。这意味着它可以选择匹配一个汉字字符,也可以选择不匹配任何汉字字符。所以当你使用这个正则表达式时,它会打印空字符串。
根据你的预期,你希望打印的结果是:
- 使用
\p{Han}*
:打印 "中文哦" - 使用
\p{Han}+
:打印 "中文哦" - 使用
\p{Han}?
:打印 "中"
然而,实际上的结果与你的预期不符。可能的原因是你的正则表达式引擎对 Unicode 属性的支持不完整,导致无法正确匹配汉字字符。
希望这个解释对你有帮助!如果你还有其他问题,请随时提问。
英文:
i have code like this
re, err = regexp.Compile(`\p{Han}*`)
if err != nil {
fmt.Println(err)
return
}
s := "foo中文哦woqu"
fmt.Println(re.FindString(s))
but it print empty.
and then i change \p{Han}*
to \p{Han}+
, it display's 中文哦.
change \p{Han}*
to \p{Han}?
, it print empty.
I find the document like this:
- x* zero or more x, prefer more
- x+ one or more x, prefer more
- x? zero or one x, prefer one
so i expect my print is:
\p{Han}*
print 中文哦\p{Han}+
print 中文哦\p{Han}?
print 中
could someone tell me what happened?
答案1
得分: 4
根据文档(已加重说明):
>FindString返回一个字符串,其中包含正则表达式在s中最左边匹配的文本。如果没有匹配,返回值是一个空字符串,但是如果正则表达式成功匹配了一个空字符串,返回值也将为空。如果需要区分这些情况,可以使用FindStringIndex或FindStringSubmatch。
\p{Han}*
匹配一个空字符串。你也可以通过使用FindAllString
来验证:
fmt.Printf("%q", re.FindAllString(s, -1))
// 输出 ["", "", "", "中文哦", "", "", "", ""]
你可以使用\p{Han}+
来匹配不包含空字符串的情况。
英文:
As the docs say (emphasis added):
>FindString returns a string holding the text of the leftmost match in s of the regular expression. If there is no match, the return value is an empty string, but it will also be empty if the regular expression successfully matches an empty string. Use FindStringIndex or FindStringSubmatch if it is necessary to distinguish these cases.
\p{Han}*
matches an empty string. You can also see that by using FindAllString
:
fmt.Printf("%q", re.FindAllString(s, -1))
// Prints ["" "" "" "中文哦" "" "" "" ""]
You can use \p{Han}+
which doesn't match an empty string.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论