Regex 如何匹配多种语言
我正在golang中编写一个正则表达式来捕获可能以不同语言出现的hashtag。例如,显而易见的是英语,但可能有拉丁或阿拉伯语用户会尝试使用这些字符集创建哈希标记。 我知道unicode字符类名,但是如何一次使用多个字符而不为每个字符生成正则表达式呢 示例代码:Regex 如何匹配多种语言,regex,go,unicode,Regex,Go,Unicode,我正在golang中编写一个正则表达式来捕获可能以不同语言出现的hashtag。例如,显而易见的是英语,但可能有拉丁或阿拉伯语用户会尝试使用这些字符集创建哈希标记。 我知道unicode字符类名,但是如何一次使用多个字符而不为每个字符生成正则表达式呢 示例代码: r, err := regexp.Compile(`\B(\#[[:ascii:]]+\b)[^?!;]*`) 这将匹配“#helloŦوق”,并输出[]字符串{hello,Ŧhello,Ŧ1608;ق},但不能仅匹配“Ŧ1584;و
r, err := regexp.Compile(`\B(\#[[:ascii:]]+\b)[^?!;]*`)
这将匹配“#helloŦوق”
,并输出[]字符串{hello,Ŧhello,Ŧ1608;ق}
,但不能仅匹配“Ŧ1584;وق”
,我建议使用
\B#[\p{L}\p{N}\p{M}_]+
其中,[\p{L}\p{N}\p{M}\u]
大致是支持Unicode的\w
模式。\p{L}
匹配任何单字字母,\p{M}
匹配任何组合标记,\p{N}
匹配任何Unicode数字
见:
输出:
#hello
#ذوق
使用文本:=“#ذوق”
,#وق
请参阅。您的正则表达式与#dé范围不匹配,因为锐重音是一个标记\p{M}而不是一个字母。将正则表达式更改为
\B\[\p{L}\p{N}\p{N}\p{M}\u*
@JGNI可能,这种简洁性是不必要的,而且\B{N}\p{L}\p{N}\p{M}+
就足够了。如果只需要在字母后匹配变音符号,则该模式看起来像\B#(?:\p{L}\p{M}*.[\p{N}}}+
。如果要求在
之后只有一个字母,那么它看起来就像\B{L}\p{M}*(?:\p{L}\p{M}*.[\p{N}}}]*
。等等等等。
#hello
#ذوق