2026-10-28 00:24:09
在bash-12中,正则表达式用于文本搜索、匹配和操作,其核心由元字符、限定符、字符类等构成,可通过组合实现复杂匹配规则。 以下是具体说明:
基本元字符
^:匹配行起始位置。例如^tux仅匹配以tux开头的行。
$:匹配行尾位置。例如tux$仅匹配以tux结尾的行。
.:匹配任意单个字符(除换行符)。例如hack.匹配hackl、hacki,但不匹配hackla。
[]:匹配括号内任意一个字符。例如coo[kl]匹配cook或cool;[^01]匹配非0和1的字符(如9[^01]匹配92)。
[-]:匹配指定范围内的字符。例如[1-5]匹配1到5的数字;[a-z]匹配任意小写字母。
限定符
?:匹配前一项0次或1次。例如colou?r匹配color或colour,但不匹配colouur。
+:匹配前一项1次或多次。例如col+匹配col、coll,但不匹配co。
*:匹配前一项0次或多次。例如co*l匹配cl、cool、coool等。
{n}:精确匹配前一项n次。例如[0-9]{3}匹配任意三位数(如123)。
{n,}:匹配前一项至少n次。例如[0-9]{3,}匹配三位数或更长的数字(如1234)。
{n,m}:匹配前一项n到m次。例如[0-9]{2,5}匹配两位到五位数字(如99或12345)。
分组与交替
():将多个字符组合为一个整体。例如ma(tri)?x匹配max或matrix。
|:匹配左右任意一侧的表达式。例如Oct(1st|2nd)匹配Oct1st或Oct2nd。
转义符
:转义特殊字符,使其作为普通字符匹配。例如a.b匹配a.b(而非a后跟任意字符再跟b)。
POSIX字符类以[: :]形式定义,匹配特定字符范围:
[:alnum:]:字母或数字(等价于[a-zA-Z0-9])。
[:alpha:]:字母(大小写均包含)。
[:blank:]:空格或制表符。
[:digit:]:数字(等价于[0-9])。
[:lower:]:小写字母。
[:upper:]:大写字母。
[:punct:]:标点符号。
[:space:]:所有空白字符(包括换行符、回车等)。
示例:
匹配三位数:[[:digit:]]{3}或[0-9]{3}。
匹配单词(含大小写):[[:alpha:]]+。
常见应用场景
电子邮件匹配:
^[a-z0-9_]+@[a-z0-9]+.[a-z]+$匹配形如user@example.com的邮箱地址(需根据实际需求扩展,如支持大写字母或更多域名层级)。
单词提取:
( ?[a-zA-Z]+ ?)匹配文本中的单词(前后可能有空格),例如从" hello world "中提取hello和world。
IP地址验证:
^([0-9]{1,3}.){3}[0-9]{1,3}$或使用POSIX字符类:
^([[:digit:]]{1,3}.){3}[[:digit:]]{1,3}$匹配0.0.0.0到255.255.255.255的IP地址(需注意:此正则未严格限制每段数值范围,实际需更复杂规则)。
注意事项: