正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在30分钟内掌握正则表达式的基础概念和常用语法,能让你快速提升处理字符串的能力。
1. **基础概念**
- **元字符**:如`.`代表任意字符,`^`表示行首,`$`表示行尾,`\d`代表数字,`\w`代表字母或数字,`\s`代表空白字符。
- **量词**:`*`表示前面的字符出现零次或多次,`+`表示一次或多次,`?`表示零次或一次,`{n}`表示恰好n次,`{n,}`表示至少n次,`{n,m}`表示n到m次。
- **分组与引用**:`( )`用于创建一个分组,`\1`引用前面分组匹配的内容。
2. **字符类**
- `[ ]`定义一个字符类,如`[abc]`匹配'a'、'b'或'c'。
- `-`在字符类中表示范围,如`[a-z]`匹配所有小写字母。
3. **否定字符类**
- `[^ ]`否定字符类,如`[^abc]`匹配除'a'、'b'、'c'外的任何字符。
4. **锚点**
- `^`匹配行首,`$`匹配行尾,`\A`匹配字符串开始,`\Z`匹配字符串结束。
5. **重复**
- `{n}`表示前面的字符重复n次,`{n,}`至少n次,`{n,m}`重复n到m次。
6. **选择与分支**
- `|`表示或操作,如`ab|cd`匹配'ab'或'cd'。
7. **转义**
- `\`用于转义特殊字符,如`\.`匹配实际的点号,`\+`匹配实际的加号。
8. **预查**
- `(?=pat)`正向前瞻,确保当前位置后面跟着模式`pat`但不匹配它。
- `(?!pat)`负向前瞻,确保当前位置后面不跟模式`pat`。
9. **非贪婪匹配**
- 添加`?`使量词变得非贪婪,例如`.*?`会尽可能少地匹配字符。
10. **零宽度断言**
- `\b`单词边界,`\B`非单词边界。
11. **正则表达式引擎**
- PCRE(Perl Compatible Regular Expressions)和JavaScript中的正则表达式引擎有所不同,了解其差异有助于编写更兼容的正则。
12. **实例应用**
- 验证邮箱地址:`/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/`
- 提取URL:`/(https?:\/\/[\w./]+)[\s]*$/i`
通过阅读《正则表达式参考.chm》、《正则表达式系统教程.CHM》、《正则表达式30分钟入门教程.mht》和《正则表达式.pdf》这些文档,你可以深入理解并熟练运用正则表达式。实践中不断尝试和调试,将使你的正则表达式技能更加纯熟。记住,熟练掌握正则表达式是每个IT从业者必备的技能之一,它能极大地提高你的工作效率。