x|y
如果没有包围在()里,其范围是整个正则表达式。
例如:
- “
z|food”能匹配“z”或“food”。 - “
(?:z|f)ood”则匹配“zood”或“food”。
Unicode处理
在.NET、Java、JavaScript、Python的正则表达式中,可以用\uXXXX表示一个Unicode字符,其中XXXX为四位16进制数字。
Unicode Property:字符属于标点、空格、字母等等。每个Unicode字符只能属于唯一Unicode Property。
.NET、Java、PHP和Ruby等语言支持。具体分类为:
字符
1
\p{L}
\p{Ll}或\p{Lowercase_Letter}:小写字符(必须有大写的形式)。\p{Lu}或\p{Uppercase_Letter}:大写字符(必须有小写的形式)。\p{Lt}或\p{Titlecase_Letter}:全词首字母大写的字符。\p{L&}或\p{Cased_Letter}:存在大小写形式的字符(Ll, Lu, Lt的组合)。\p{Lm}或\p{Modifier_Letter}:音标修饰字符。\p{Lo}或\p{Other_Letter}:不具有大小写的字符或字形。
附加符号
1
\p{M}
\p{Mn}或\p{Non_Spacing_Mark}:与其他字符结合,不额外占用空间的字符,例如日耳曼语元音变音。\p{Mc}或\p{Spacing_Combining_Mark}:与其他字符结合,额外占用空间的字符,例如马拉雅拉姆文#元音字母及附标。\p{Me}或\p{Enclosing_Mark}:包含其他字符的字符,例如圆圈、方块。
分隔符p{Z}
\p{Zs}或\p{Space_Separator}:a whitespace character that is invisible, but does take up space.\p{Zl}或\p{Line_Separator}:line separator character U+2028.\p{Zp}或\p{Paragraph_Separator}:paragraph separator character U+2029.
符号
1
\p{S}
\p{Sm}或\p{Math_Symbol}:数学符号。\p{Sc}或\p{Currency_Symbol}:通货符号。\p{Sk}或\p{Modifier_Symbol}:组合为其他字符的符号。\p{So}或\p{Other_Symbol}:其他符号。
数值字符
1
\p{N}
标点符号
1
\p{P}
其它符号
1
\p{C}
(包括不可见控制字符与未用码位)
Unicode Block:按照编码区间划分Unicode字符,每个Unicode Block中的字符编码属于一个编码区间。例如Java语言\p{ InCJK_Compatibility_Ideographs },.NET语言\p{IsCJK_Compatibility_Ideographs}。
Unicode Script:按照字符所属的书写系统来划分Unicode字符。PHP和Ruby(版本不低于1.9)支持Unicode Script。例如\p{Han}表示汉字(中文字符)。
示例
用户昵称的正则匹配, 合法的字符有 0-9, A-Z, a-z, _, 汉字
1 | func IsValidEmailNickName(nickName string) bool { |
pythonic的NickName
1 | // 用户昵称的正则匹配, 合法的字符有 0-9, A-Z, a-z, _, 汉字 |