基本正则使用

基础

实例描述
[Pp]ython匹配 “Python” 或 “python”。
rub[ye]匹配 “ruby” 或 “rube”。
[abcdef]匹配中括号内的任意一个字母。
[0-9]匹配任何数字。类似于 [0123456789]。
[a-z]匹配任何小写字母。
[A-Z]匹配任何大写字母。
[a-zA-Z0-9]匹配任何字母及数字。
[^au]除了au字母以外的所有字符。
[^0-9]匹配除了数字外的字符。
{M,N}区间M是下界而N是上界。
实例描述
.匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
?匹配一个字符零次或一次,另一个作用是非贪婪模式
+匹配1次或多次,等价于{1,}
*匹配0次或多次,等价于{0,}
\b匹配一个长度为0的子串,匹配的是单词的边界,\bmaster\b 就仅匹配有边界的master单词。
\d匹配一个数字字符。等价于 [0-9]。
\D匹配一个非数字字符。等价于 [^0-9]。
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
\W匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。
^指定的是一个字符串的开始,/^python/ 以python开头
$指定的是一个字符串的结束,/python$/ 以python结尾

进阶

实例描述
()分组,2222-3333333,/(\d{4})-(\d{7})/ 捕获 2222 和 3333333
|or,/( .jpg | .gif | .png)/
(?:表达式)非捕获分组,分组匹配之后,不需要的用 ?:
表达式: /(\d{4})-(\d{2})-(?:\d{2})/
文本:2019-10-28
\N分组的回溯引用 ,\1 表示的就是第一个分组
表达式: /<(\w+)>.*?</\1>/
文本:<font>hi</font>

断言

实例描述
(?=表达式)正向先行断言,指在某个位置向右看,表示所在位置右侧必须能匹配表达式。
喜欢(?=你):表示喜欢的后面必须有你字才能匹配到
(?=.*?[a-z])(?=.*?[A-Z]).+ 这段正则表达式规定了匹配的字符串中
必须包含至少一个大写和小写的字母。
(?!表达式)反向先行断言,如果要取出喜欢两个字,喜欢(?!你)要求这个喜欢后面没有你
(?<=表达式)正向后行断言,指在某个位置向左看,表示所在位置左侧必须能匹配表达式
如果要取出喜欢两个字,要求喜欢的前面有我,后面有你,(?<=我)喜欢(?=你)
(?<!表达式)反向后行断言,要求喜欢的前面没有我,后面没有你,(?<!我)喜欢(?!你)
### 扩展正则表达式基本正则表达式的区别 #### 特征对比 基本正则表达式(BRE)和扩展正则表达式(ERE)的主要差异在于语法结构及其所支持的功能特性。对于需要两个或多个反斜杠转义的情况,建议采用扩展正则表达式以简化书写并提高可读性[^1]。 #### 语法上的不同 - **分组** 在基本正则表达式中,为了创建一个分组,必须使用`\(` 和 `\)` 来包围想要组合在一起的部分;而在扩展正则表达式里,则可以直接利用`(` 和 `)` 实现相同功能而无需额外的转义字符[^4]。 - **重复次数** 对于指定某个模式出现的具体次数范围,在基本版本下需借助特殊的记号形式如`\{m,n\}` 表达至少 m 次至多 n 次的意思;相比之下,扩展版允许更加直观地写作 `{m,n}` 形式[^3]。 - **其他特殊符号** 许多功能性的元字符在两种类型的正则中有不同的表现方式: | 功能 | 基本正则表达式 (BRE) | 扩展正则表达式 (ERE) | | --- | --- | --- | | 零个或多个任意字符 | `.*` | `.*` | | 可选项 | `\?` | `?` | | 一次或多次 | `\+` | `+` | 表中的例子展示了部分常见的操作符如何因类型变化而改变写法[^2]。 #### 工具兼容性 值得注意的是,并不是所有的工具都同时支持这两种风格的正则表达式。例如,默认情况下 `grep` 使用的是基本正则表达式,如果希望启用扩展正则表达式的支持,则可以通过 `-E` 参数实现这一转换。 ```bash # 使用基本正则表达式查找包含"abc"字符串的行 grep '\<abc\>' file.txt # 同样的任务通过扩展正则表达式完成 grep -E '(^|[[:space:]])abc([[:space:]]|$)' file.txt ``` 上述代码片段说明了当处理同样的需求时,两者之间的具体应用差别所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值