1 第4.3节:正则表达式详解-特殊字符
除了普通字符和转义字符外,正则表达式中还有类特殊字符,可以对正则表达式的行为进行修饰,下表是一些常用的正则表达式特殊字符及含义:
字符 | 说明 |
---|---|
^ | 匹配输入字符串的开始位置。要匹配 “^” 字符本身,请使用 “\^” |
$ | 匹配输入字符串的结尾位置。要匹配 “$” 字符本身,请使用 “\$” |
( ) | 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 “\(” 和 “\)” |
[…] | 用来自定义能够匹配 ‘多种字符’ 的表达式,[]中的…表示用户自定义字符。要匹配中括号,请使用 “\[” 和 “\]” |
[^…] | 这是一个否定 逻辑,匹配任何字符但除了这里[]中定义的字符。 |
{ } | 修饰匹配次数的符号。要匹配大括号,请使用 “\{” 和 “\}” |
. | 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 “\.” |
? | 修饰匹配次数为 0 次或 1 次。要匹配 “?” 字符本身,请使用 “\?” |
+ | 修饰匹配次数为至少 1 次。要匹配 “+” 字符本身,请使用 “\+” |
* | 修饰匹配次数为 0 次或任意次。要匹配 “*” 字符本身,请使用 “\*” |
| | 左右两边表达式之间 “或” 关系。匹配 " |
- 示例1:使用“^”筛选行首是数字的文本
文本样例:
sample
123
456
789abc
012345678
end
awk代码及运行结果:
$ awk '/^[[:digit:]]+/' sample1.txt
123
456
789abc
012345678
- 示例2:使用“$”筛选整行都是数字的文本
上述文本样例中,有部分行是数字+字符的,如果想筛选出全部是 数字的行,该如何处理呢?此时可以使用“^”和“$”来联合约束文本内容:
awk代码及运行结果:
$ awk '/^[[:digit:]]+$/' sample1.txt
123
456
012345678
- 示例3:利用
分组
把数字文本行前加上TEL:
前缀
使用正则表达式时,很我场景是查找出符合条件的文本,将其整理成新的格式,此时就使用到了分组。
awk代码及运行结果:
$ awk '/^[[:digit:]]+$/{print gensub(/(.*)/, "TEL: \\1", "g")}' sample1.txt
TEL: 123
TEL: 456
TEL: 012345678
- 示例4:限定匹配次数,输出3个数字的文本行
$ awk '/^[[:digit:]]{3}$/' sample1.txt
123
456
注意:正则表达式中的{3}
表示匹配3个数字,其实,{}次数限定中有两个参数:{最少次数, 最多次数}
,使用时有很多用法:
{指定次数}
:严格指定前面的匹配多少次。{最小次数,}
:至少要匹配上最小次数
,多则不限, 比如:[0-9]{3,}
可以匹配123
、1234
、12345
…{,最大次数}
:至多匹配不要超过最大次数
,最少为0次,比如:[0-9]{,3}
可以匹配1
、12
、123
,但不能匹配1234
{,}
:匹配0到无数次,和+
的效果相同。注:{}
是错误用法。
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来自AI平台,如:豆包、DeepSeek(硅基流动)(注册链接)等,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.