首页 > 代码库 > 正则表达式
正则表达式
正则表达式是一类字符书写的模式,其中许多字符不表示其字符表面意义,而表示控制或者通配等功能。
元字符的作用是不表示其字面意义,用于表示额外功能的描述
正则表达式的元字符
字符匹配包括以下:
. :匹配任意单个字符
[] :匹配指定范围内的任意单个字符。 常用的有以下几个:
[[:alnum:]] :文字,数字字符 [[:alpha:]] :字母字符
[[:lower:]] :小写字符 [[:upper:]] :大写字符
[[:digit:]] :小数 [[:xdigit:]] :十六进制数字
[[:punct:]] :标点符号 [[:blank:]] :制表符和空格
[[:space:]] :空格 [[:cntrl:]] :所有控制符
[[:print:]] :所有可打印的字符 [[:graph:]] :除空格外的所有可打印字符
反义:[^] 也就是取反
次数匹配的元字符:实现指定其前面的字符所能够出现的次数
* : c重复0次或者更多次 + :重复一次或者更多次
? :重复0次或者一次 {n} :重复n次
{n,} :重复n次或者多次 {m,n} : 重复不少于n次,不多于m次
.* :表示任意长度的字符
正则表达式的子表达式
# eqrgep “(or){2,}”/user/share/dict/words
sororties
sorority
sorority’s
正则表达式“(or){2,}“ 匹配所有or重复两次或者更多次的行,如果去掉or两边的括号,那么这条正则表达式匹配的是”字母o后边紧跟两个或者更多字母r的行。
正则表达式的位置锚定:
^:行首锚定,写在模式的最左侧
$:行尾锚定:出现模式的最右侧
^$:表示空白行
单词和字符串的区别:不包含特殊字符的连续字符组成的串叫做单词:
\<:词首,出现于单词的左侧
\>:词尾,出现于单词右侧
逆向引用:
在子表达式(分组)中捕获的内容可以在正则表达式中的其他地方再次使用,可以使用反线“\”加上子表达式的编号来之代该分组所匹配到的内容。
(\<.*\>.?()*\1
此正则表达式表达的是在匹配到的某个单词出现后,紧跟0个或者一个标点符号以及任意个空格之后再次出现这个单词的行。
解释:
(\<.*\> :匹配任意长度的单词。
.? :匹配0个或者多个标点符号。(由于在句点之前匹配的是单词,因此句点“.”在这里只能匹配标点。
( )* :匹配0个或者多个空格
\1 :指代第一个子表达式匹配到的模式
正则表达式的字符转译:
由于各个符号在正则表达式中都不表达原来的含义。所以在正则表达式中可以使用反斜线加上元字符表达原来的含义。
“\”:取消所有元字符的特殊含义。
常用命令选项:
-v: 反向选取
-o: 仅显示匹配的字串,而非字串所在的行
-i:ignore-case,忽略字符大小写
-E: 支持使用扩展正则表达式