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, _, 汉字 |