1、正则表达式的使用
正则表达式,又称规则表达式。在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为\”元字符\”)组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
1、Shell 正则表达式的组成
(1)普通字符
普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。
字符 |
含义 |
[abc] |
匹配 […] 中的所有字符,例如 [se] 匹配字符串 \”test shell\” 中所有的 s e字母 |
[^abc] |
匹配除了 […] 中的其他字符,例如 [^se] 匹配字符串 \”test shell\” 中除 s e的字母 |
[A-Z] |
[A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母 |
[\\s\\S] |
匹配所有。\\s 是匹配所有空白符,包括换行,\\S 非空白符,包括换行 |
\\w |
匹配字母、数字、下划线。等价于 [A-Za-z0-9] |
(2)非打印字符
字符 |
含义 |
\\cx |
匹配由x指明的控制字符。\\cM 匹配一个ctrl-M或回车符。x的值必须为A-Z或a-z之一。 |
\\f |
匹配一个换页符。等价于 \\x0c 和 \\cL |
\\n |
匹配一个换行符。等价于 \\x0a 和 \\cJ |
\\r |
匹配一个回车符。等价于 \\x0d 和 \\cM |
\\s |
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \\f\\n\\r\\t\\v] |
\\S |
匹配任何非空白字符。等价于 [^ \\f\\n\\r\\t\\v] |
\\t |
匹配一个制表符。等价于 \\x09 和 \\cI |
\\v |
匹配一个垂直制表符。等价于 \\x0b 和 \\cK |
(3)特殊字符
字符 |
含义 |
$ |
匹配字符串结尾位置,使用\\$,匹配$本身 |
() |
标记一个子表达式的开始和结束位置。要匹配这些字符,请使用 \\( 和 \\) |
* |
匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \\* |
+ |
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \\+ |
. |
匹配除换行符 \\n 之外的任何单字符。要匹配 . ,请使用 \\. |
[ |
标记一个中括号表达式的开始。要匹配 [,请使用 \\[。 |
? |
匹配前面的子表达式零次或一次。要匹配 ? 字符,请使用 \\?。 |
\\ |
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, \’n\’ 匹配字符 \’n\’。\’\\n\’ 匹配换行符。序列 \’\\\\\’ 匹配 \”\\\”,而 \’\\(\’ 则匹配 \”(\” |
^ |
匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不匹配该方括号表达式中的字符集合。要匹配^ 字符本身,请使用 \\^ |
{ |
标记限定符表达式的开始。要匹配 {,请使用 \\{。 |
| |
指明两项之间的一个选择。要匹配 |,请使用 \\|。 |
(4)限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种
字符 |
含义 |
* |
匹配前面的子表达式零次或多次。例如,zo* 能匹配 \”z\” 以及 \”zoo\”。* 等价于{0,}。 |
+ |
匹配前面的子表达式一次或多次。\’zo+\’匹配 \”zo\” 以及 \”zoo\”,但不能匹配 \”z\”。+ 等价于 {1,}。 |
? |
匹配前面的子表达式零次或一次。例如,\”do(es)?\” 可以匹配 \”do\” 、 \”does\” 中的 \”does\” 、 \”doxy\” 中的 \”do\” 。? 等价于 {0,1} |
{n} |
n 是一个非负整数。匹配确定的n次。\’o{2}\’不能匹配\”Bob\”中的\’o\’,但是能匹配 \”food\” 中的两个 o |
{n,} |
n 是一个非负整数。至少匹配n 次。例如,\’o{2,}\’ 至少匹配o两次,不能匹配 \”Bob\” 中的 \’o\’,但能匹配 \”foooood\” 中的所有 o。\’o{1,}\’ 等价于 \’o+\’。\’o{0,}\’ 则等价于 \’o*\’。 |
{n,m} |
m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m次。例如,\”o{1,3}\” 将匹配 \”fooooood\” 中的前三个 o。\’o{0,1}\’ 等价于 \’o?\’。请注意在逗号和两个数之间不能有空格。 |
个人公众号: