一、基本正则表达式
关于正则表达式的内容挺多的,掌握好下文中提及的内容就能满足正常工作中的需要,如果是专门做正则编程的,可以去买本正则表达式的书籍来看好了^_^。只有多动手多练习,才是学开发编程的最好姿势。
1. 符号"."
匹配任意一个字符,除了换行符,但是需要注意的是,在sed中不能匹配换行符,但是在awk中可以匹配换行符。类似shell通配符中的"?",匹配一个任意字符。
2. 符号"*"
1
| "*"表示前边字符有0个或多个。".*"表示任意一个字符有0个或多个,也就是能匹配任意的字符。类似shell通配符中的"*",可以匹配任意字符。
|
3. 符号"[]"
1 2 3 4 5 6 7 8 9
| "[ ]"中括号中可以包含表示字符集的表达式。使用方法大概有如下几种。 [a-z]:表示a-z字符中的一个,也就是小写字母。 [0-9]:表示0-9字符中的一个,也就是表示数字。 [A-Z]:表示大写字母。 [a-zA-Z]:表示字符集为小写字母或者大写字母。 [a-zA-Z0-9]:表示普通字符,包括大小写字母和数字。 [abc]:表示字符a或者字符b或者字符c。 [^0-9]:表示非数字类型的字符,^表示取反意思,只能放在中括号的开始处才有意义。 [-cz]:表示字符-或者字符c或者字符z,注意与[c-z]的区别,因为-符号没有放在e和f之间。
|
4. 符号"^"
1 2 3
| "^"表示行首的意思,也就是每一行的开始位置。在这里并不是上边字符范围中取反的意思,^符号只有在"[]"符号的开头处才能表示字符取反。 ^abc:表示以abc开头的字符串abc。 ^abc.*:表示以abc开头的字符串abcxxx。
|
5. 符号"$"
1 2 3
| "$"表示行尾的意思,也就是每一行的结尾位置,很好理解,和"^"正好相反。 world$:表示以world结尾的字符串world,如果该行中间有world字符串是不符合匹配条件的。 ^$:表示空行。行首和行尾没有内容,可不就是空行嘛。
|
6. 符号""
1
| "\"表示是转义字符,和其它语言中用到的转义字符意义基本上是一样的。其实简单理解,就是把元字符转义为普通字符,比如"\\"表示普通符号"\",把普通字符转换为特殊意义符号,比如"\n"表示把普通字符n转义为换行符。
|
7. 符号"{}"
1 2 3 4 5
| "{}"表示前边字符的数量范围,大概有三种用法,其实容易理解,看例子就知道了,但是必须注意要加上转义字符"\",否则不生效,表示为普通字符"{"或"}"。
\{2\}:表示前边字符的重复次数是2。 \{2,\}:表示前边字符的重复次数至少是2,也就是大于等于2。 \{2,9\}:表示前边字符的重复次数大于2但小于9。
|
8. 符号" \ < " 和 " \ > "
1 2 3 4 5
| "\<"表示匹配条件为词首的位置,理解上可以对比 "^" 行首。
举个例子,"nihao 1hello 2hello3 hello4"有这么内容的一行内容。 "\< hello"匹配结果"nihao 1hello 2hello3 hello4"; "hello\>"匹配结果"nihao 1hello 2hello3 hello4",这种匹配方式用的不是太多,用到会用就OK。
|
二、扩展正则表达式
1
| 扩展正则表达式是在基本正则表达式中扩展出来的,内容不是很多,使用频率上可能没有基本正则表达式那么高,但是扩展正则依然很重要,很多情况下没有扩展正则是搞不定的。sed命令使用扩展正则需要加上选项-r。
|
1. 符号"?"
2. 符号"+"
3. 符号" | "
1 2
| "|":表示指明两项之间的一个选择。 abc|ABC:表示可以匹配abc或者ABC。
|
4. 符号"()"
1 2 3
| "()"表示分组,类似算数表达式中的。子命令表达式中可以通过\1,\2,\3等来表示分组匹配到的内容。其实"()"也可以在基本正则表达式中使用的。 b:表示可以匹配ab或者bb字串 ||:表示匹配0-9或者00-09或者10-19范围的字符。
|
5. 符号"{}"
1
| 这里的"{}"和基本正则表达式中的大括号意义是一样的,只不过在使用时不用加"\"转义符号。
|
三、正则表达式的分类和应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 字符类 [Ww]hat \.H[12345]
字符的范围 [a-z] [0-9] [Cc]hapter[1-9] [-+*/] [0-1][0-9][-/][0-3][0-9][-/][0-9][0-9]
排除字符类 [^0-9]
重复出现的字符 [15]0* [15]00
字符的跨度 *与\{n,m\}
电话号码的匹配 [0-9]\{3\}-[0-9]\{7,8\}
分组操作 compan(y|ies)
|