记录学习过程

简介

正则表达式是一种文本模匹配,包括普通字符(a-z),还有元字符。 它可以看作是一种文本匹配公式,通过编写公式,你可以从一堆文本数据中获取你想要的文本。 可以理解为检查一个字符串中是否包含某中子串,将匹配到的字串替换或者是提取。

正则表达式是第三方产品,但被许多语言使用,shell,php,python,java,js 等等。 i> shell只有部分命令支持,常见命令支持的有:grep,sed,awk

特殊字符

定位符:

^ :锚定开头默认锚定一个字符 ^a 匹配a开头: aaaa,abcjs,a,ajdjjewj,a1838`

$ :锚定结尾默认锚定一个字符 z$ 匹配z结尾: abcdz, zzzz, z, ejwj, 12z

i> 同时锚定开头与结尾是精确匹配,只锚定开头或结尾是模糊匹配

^ac$精确匹配: 匹配以a开头,以c结尾,两个字符的字符串: ac


匹配符 (匹配字符串)

. :匹配除回车以外的任意一个字符 ^a.c$ :acc, a c, a_c, a8c, aCc

() :字符串分组,见|的使用

[] :定义字符类,匹配括号中的一个字符 匹配以a开头c结尾中间0到9 ^a[0-9]c$: a1c, a0c, a9c

[^] :表示否定括号中出现字符类中的字符,取反。 匹配以a开头c结尾中间不是0到9 ^a[^0-9]c$: asc, a c, aic

\ :转义字符 匹配a开头c结尾中间是的字符 因为在表达式还有其他含义,所以使用转义字符^a\*c$ : a*c

| :或,或者的意思 匹配a或者b开头c结尾的字符串 ^(a|b)c$ : ac, bc


限定符

对前面的字符或者字符串加以限定 * :某个字符之后加*号表示该字符不出现或者出现多次 ^ab*c$ : ac, abc, abbbbbbbc, abbc

? :与*相似,表示该字符不出现或出现一次。 ^ab?c$ : ac, abc

+ :与*号相似,表示该字符出现一次或多次,但必须出现一次。 ^ab+c$ : abc, abbbc,abbbbbc

{n,m} :某个字符之后出现,表示该字符最少出现n次,最多m次 ^ab{1,5}c$ : abc, abbbc, abbc, abbbbbc

{m} :正好出现m次 ^ab{2}c$ : abbc

POSIX 字符

posix字符 含义
[:alnum:] 匹配任意字符0-9 a-z A-Z
[:alpha:] 匹配任意字母,大写或小写
[:digit:] 数字0-9
[:graph:] 非空字符(非空格控制字符)
[:lower:] 小写字符 a-z
[:upper:] 大写字符 A-Z
[:cntrl:] 控制字符
[:print:] 非空字符(包括空格)
[:punct:] 标点符号
[:blank:] 空格和TAB字符
[:xdigit:] 16进制数字
[:space:] 所有空白字符(新行,空格,制表符)