先看表达式
(?(?=\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}
内联匹配模式
本文深入解析了复杂的正则表达式结构,包括元字符、限定符和反义词的使用,通过实例展示了如何匹配特定模式的字符串,如电话号码和强密码规则。

1211

被折叠的 条评论
为什么被折叠?



