先看表达式
(?(?=\s)\s|\b)(o8[^0-9^a-z]?|0[^0-9^a-z]?8[^0-9^a-z]?|6[^0-9^a-z]?2[^0-9^a-z]?8[^0-9^a-z]?|\\+6[^0-9^a-z]?2[^0-9^a-z]?8[^0-9^a-z]?){1}([\\dio][^0-9^a-z]?){8,11}(?(?=\s)\s|\b)
到底什么是正则表达式?
在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
常用元字符
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
常用限定符
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
常用反义词
代码/语法 | 说明 |
---|---|
\W | 匹配任意不是字母,数字,下划线,汉字的字符 |
\S | 匹配任意不是空白符的字符 |
\D | 匹配任意非数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou这几个字母以外的任意字符 |
有了以上的准备,我们还是无法理解这个表达式,疑问是
- (?is)
- (?(?=s)
- 还有各个符号的优先级问题
先说优先级,一般(){}的优先级比较高,而且他们是成对出现,所以解析之后是这样,分成四段
(?(?=\s)\s|\b)
(o8[^0-9^a-z]?|0[^0-9^a-z]?8[^0-9^a-z]?|6[^0-9^a-z]?2[^0-9^a-z]?8[^0-9^a-z]?|\\+6[^0-9^a-z]?2[^0-9^a-z]?8[^0-9^a-z]?){1}
([\\dio][^0-9^a-z]?){8,11}
(?(?=\s)\s|\b)
()内最高级别的符号是|
一些常用的例子
强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
这个正则表达式将强制执行这些规则: 至少1个大写字母,(?=.*[A-Z]) 至少1个小写英文字母,(?=.*[a-z]) 至少1位数字,(?=.*\d) 最小8-10个长度.{8,10}
内联匹配模式