导图社区 正则表达式基础
介绍了定义、用途、1组成元素、2特殊字符与符号、3正则表达式在编程语言中的应用、5正则表达式实践技巧、6正则表达式常见问题与解决方案等知识总结
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
正则表达式基础
定义
用于匹配字符串中字符组合的模式
由普通字符和特殊字符组成
用途
文本搜索
文本替换
数据验证
字符串分割
1组成元素
普通字符
匹配自身
如字母、数字、汉字等
特殊字符
具有特殊意义的字符
如点号(.)、星号(*)等
2特殊字符与符号
点号 (.)
匹配除换行符之外的任意单个字符
星号 (*)
匹配前面的子表达式零次或多次
加号 (+)
匹配前面的子表达式一次或多次
问号 (?)
匹配前面的子表达式零次或一次
方括号 ( )
字符集合
匹配方括号内的任意字符
如abc匹配a、b或c
范围表达式
使用连字符()表示字符范围
如az匹配任意小写字母
否定字符集
在方括号开头使用脱字符(^)
如^az匹配非小写字母的任意字符
花括号 ({ })
量词
指定前面元素出现的次数
如{2}匹配前面元素恰好出现2次
如{2,}匹配前面元素至少出现2次
如{2,4}匹配前面元素出现2到4次
竖线 ()
逻辑“或”操作符
匹配竖线两边的任一表达式
如abcdef匹配"abc"或"def"
反斜线 (\)
转义字符
将特殊字符转为普通字符
如\.\*匹配点号(.)和星号(*)
特殊字符的转义
如\d匹配任意数字,等同于09
3正则表达式在编程语言中的应用
JavaScript
使用正则表达式对象
创建方式:/pattern/flags或new RegExp("pattern", "flags")
flags包括:g(全局搜索)、i(不区分大小写)、m(多行搜索)
字符串方法
match()
找到匹配的字符串
replace()
替换匹配的字符串
search()
搜索匹配的字符串
split()
按匹配的字符串分割字符串
Python
re模块
编译正则表达式
re.compile(pattern, flags)
匹配对象
group()
groups()
搜索与匹配
fullmatch()
替换与分割
sub()
subn()
Java
Pattern类
Pattern.compile(String regex)
匹配器
Matcher类的实例方法
find()
matches()
replaceAll()
6正则表达式常见问题与解决方案
匹配特殊字符
使用反斜线转义
如要匹配点号(.),使用\.
匹配换行符
使用点号(.)时需注意
点号不匹配换行符
使用\s\S或\dD匹配任意字符,包括换行符
处理大小写敏感问题
使用i标志
在正则表达式后添加i标志
如/abc/i匹配"abc"、"ABC"等
匹配特定位置的字符
使用锚点
如要匹配字符串开头的"abc",使用^abc
匹配多个可能的字符串
使用管道符号()
如要匹配"cat"或"dog",使用catdog
避免过度使用正则表达式
考虑其他字符串处理方法
对于简单的字符串操作,正则表达式可能不是最佳选择
使用字符串的内置方法可能更高效
5正则表达式实践技巧
编写可读性强的正则表达式
使用命名捕获组
提高代码可读性
如(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})
避免滥用点号(.)
可能导致不精确的匹配
使用字符集或特定模式替代
使用量词谨慎
避免贪婪模式导致的性能问题
适当使用非贪婪量词
测试与调试
使用在线工具
如RegExr、Regex101等
方便测试和调试正则表达式
编写测试用例
确保正则表达式覆盖所有预期情况
性能优化
避免回溯
复杂的正则表达式可能导致大量回溯
简化表达式或使用非捕获组减少回溯
使用合适的量词
根据实际需求选择量词
减少不必要的匹配尝试
4正则表达式高级特性
锚点
脱字符 (^)
匹配输入字符串的开始位置
如^abc匹配以"abc"开头的字符串
美元符号 ($)
匹配输入字符串的结束位置
如abc$匹配以"abc"结尾的字符串
单词边界 (\b)
匹配单词的开始或结束位置
如\babc\b匹配独立的"abc"
反向引用
通过数字引用之前的捕获组
如(\d)\1匹配两个连续的相同数字
前瞻和后顾
正向前瞻 (?=)
匹配某个模式的前面位置
如abc(?=def)匹配"abc"后面紧跟"def"的"abc"
负向前瞻 (?!)
匹配某个模式的前面位置的否定
如abc(?!def)匹配"abc"后面不是"def"的"abc"
正向后顾 (?<=)
匹配某个模式的后面位置
如(?<=abc)def匹配"abc"前面的"def"
负向后顾 (?<!)
匹配某个模式的后面位置的否定
如(?<!abc)def匹配"abc"前面不是"abc"的"def"
以上是围绕"生成一个正则表达式的思维导图"的多层级大纲。每个主题下的内容都进行了详细拆解,以帮助理解正则表达式的各个方面。