导图社区 正则表达式(Regular Expression)
这是一篇关于正则表达式(Regular Expression)的思维导图,主要内容包括:前言,一、什么是正则表达式?,二、为什么需要正则表达式?,三、正则表达式语法如何使用,四、实战案例演示,五、扩展功能。
这是一篇关于Jinja2模版语法的思维导图,主要内容包括:1. 变量输出,2. 控制结构,3. 注释,4. 过滤器(Filters),5. 测试(Tests),6. 宏(Macros),7. 模板继承,8. 空白控制,9. 其他功能,总结。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
正则表达式(Regular Expression)
前言
工作中经常会在一个大量的文本文件中筛选特定的文本信息,大家都是用什么方法去筛选过滤出有效信息? 例如日志中网络状态的变化情况。
一、什么是正则表达式?
正则表达式(简称regexp)是一种用于匹配、查找和操作文本的模式描述语言。它由一系列字符和特殊符号组成,可以:
检查字符串是否符合某种模式
从文本中提取特定部分
替换文本中的内容
二、为什么需要正则表达式?
高效处理文本:比传统的字符串操作方法更简洁高效
模式匹配:可以描述复杂的文本模式而不仅是固定字符串
跨语言通用:几乎所有编程语言都支持正则表达式
强大灵活:能解决复杂的文本处理问题
三、正则表达式语法如何使用
使用的基础形式
输入文本通过正则表达式的匹配后,获得符合表达式的文本列表
其中正则表达式由元字符组成
常用元字符
普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
示例:a b 1 2 \r \t .
基础元字符
. (点号)
匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \.
示例:a.b 匹配 "aab", "a1b", "a b"
^ (脱字符)
匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^
示例:^abc 匹配以 "abc" 开头的字符串
示例:[^abc] 匹配任意不等于a b c的字符
$(美元符)
匹配输入字符串的结尾位置。要匹配 $ 字符本身,请使用 \$
示例:xyz$ 匹配以 "xyz" 结尾的字符串
\ (反斜杠)
将下一个字符标记为特殊字符、或原义字符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("
示例:\. 匹配实际的点号而不是任意字符
字符类元字符
[ ] (方括号)
定义字符集合,匹配其中任意一个字符。要匹配 [和],请使用 \[和\]
示例:[abc] 匹配任意a b c 任意其中一个字母
[^] (否定字符类)
匹配不在方括号中的任意字符
- (连字符)
在字符类中表示范围。仅在方括号内为特殊字符,在方括号外为普通字符
示例:[0-9] 匹配任意非数字字符
量词类元字符
* (星号)
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
示例:ab*c 匹配 "ac", "abc", "abbc" 等
+ (加号)
匹配前面的子表达式一次或多次(至少1次)。要匹配 + 字符,请使用 \+
示例:ab+c 匹配 "abc", "abbc" 但不匹配 "ac"
? (问号)
匹配前面的子表达式零次或一次(至多1次)。要匹配 ? 字符,请使用 \?
示例:colou?r 匹配 "color" 和 "colour"
示例:非贪婪限定符 todo
{ } (花括号)
限定符前一个字符匹配的次数。要匹配 { 和 },请使用 \{ 和 \}
{n}
精确匹配n次
示例:a{3} 匹配 "aaa"
{n,}
至少匹配n次
示例:a{2,} 匹配 "aa", "aaaa" 等
{n,m}
匹配n到m次
示例:a{2,3} 匹配 "aa", "aaa" 等
分组和选择元字符
( ) (圆括号)
标记一个子表达式的开始和结束位置。子表达式可以用于捕获并提供以后使用。要匹配这些字符,请使用 \( 和 \)
示例:(ab)+ 匹配 "ab", "abab" 等
| (竖线)
表示"或"关系。要匹配 |,请使用 \|
示例:cat|dog 匹配 "cat" 或 "dog"
转义字符类元字符
通用转义字符
\r
匹配回车符
\n
匹配换行符
\t
匹配制表符
\f
匹配换页符
\v
匹配垂直制表符
边界匹配元字符
\b
匹配单词边界
示例:\bcat\b 匹配 "cat" 但不匹配 "category"
\B
匹配非单词边界
示例:\Bcat\B 匹配 "scattered" 中的 "cat" 但不匹配单独的 "cat"
字符集合类元字符
\d
匹配任意数字,等价于 [0-9]
\D
匹配任意非数字,等价于 [^0-9]
\w
匹配任意单词字符(字母、数字、下划线),等价于 [a-zA-Z0-9_]
\W
匹配任意非单词字符,等价于 [^a-zA-Z0-9_]
\s
匹配任意空白字符(空格、制表符、换行符等)
\S
匹配任意非空白字符
元字符优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。 相同优先级的从左到右进行运算,不同优先级的运算先高后低。
四、实战案例演示
1. 验证电子邮件
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
2. 提取URL中的域名
https?://([^/]+)
3. 匹配日期格式(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
4. 查找HTML标签
<([a-z]+)([^<]+)*(?:>(.*)<\/\1>| *\/>)
五、扩展功能
1. 前后查找
(?=pattern):正向肯定预查
(?!pattern):正向否定预查
(?<=pattern):反向肯定预查
(?<!pattern):反向否定预查
示例:匹配后面不跟着"bar"的"foo"
foo(?!bar)
2. 贪婪与非贪婪匹配
默认是贪婪匹配(尽可能多匹配)
添加?变为非贪婪匹配(尽可能少匹配)
示例:
<.*> # 贪婪匹配,匹配整个标签 <.*?> # 非贪婪匹配,匹配单个标签
3. 修饰符/标志
i:不区分大小写
g:全局匹配
m:多行模式
s:使.匹配包括换行符