不同程序中的regex的使用
grep
表达式 | 含义 | |
---|---|---|
-E | 扩展正则表达式 | |
-G | 基本正则表达式 | |
-P | perl基本表达式 | |
-o | 仅仅输出匹配结果 | |
-v | 进行求非操作 | |
-c | 计算匹配的总数 |
perl
表达式 | 含义 | |
---|---|---|
m/pattern/ | 搜索 | |
s/pattern/pattern/ | 替换 | |
qr/pattern/ | 返回一个regex对象供以后使用 | |
split() | 把一个字符串拆分成子字符串 | |
\i | 不区分大小写 | |
\g | 全局搜索 | |
$' | 匹配前面的所有东西 | |
$` | 匹配之后的所有东西 | |
$& | 整个匹配的字符串 |
匹配纯字符串
表达式 | 含义 | |
---|---|---|
\ | 用来对字符进行转义 | |
. | 可以用来表示任何字符 |
匹配一组字符
[]
用来表示字符集合,出现在它们之间的字符可以使用。字符区间的关系。
字符区间可以在[]
中使用-来实现。
注意:
-
只有在[]中使用时才有特殊的含义,在其他环境中使用时,不需要使用\进行转义。
在字符区间中取非使用^
元字符。
注意:
^
的效果作用于给定字符集合里的所哟字符和字符区间,而不仅仅是紧跟在^
后的那一个字符或字符区间。
使用元字符
对元字符转义需要用到\字符,这个字符对任何元字符都具有转义作用。
配对的元字符不用作元字符时必须被转义。
正则表达式 | 含义 | |
---|---|---|
[\b] | backtrace | |
\f | 换页符 | |
\n | 换行符 | |
\r | 回车符 | |
\t | 制表符(Tab) | |
\v | 垂直制表符 |
匹配数字
正则表达式 | 含义 | |
---|---|---|
\d | 任何一个数字字符,即[0-9] | |
\D | 任何一个非数字字符,即[^ 0-9] |
匹配字母和数字(包括_)
正则表达式 | 含义 | |
---|---|---|
\w | [0-9a-zA-Z_] | |
\W | [^ 0-9a-zA-Z_] |
匹配空白
正则表达式 | 含义 | |
---|---|---|
\s | [\f\n\t\r\v ] | |
\S | [^ \f\n\t\r\v ] |
注意\b,即backtrace没有包含在\s中,因此也就灭有包含在\S中。
posix字符类
正则表达式 | 含义 | |
---|---|---|
[:alnum:] | 任何一个字母或数字[a-zA-Z0-9] | |
[:alpha:] | 任何一个字母[a-zA-Z] | |
[:blank:] | 空格或制表符[\t ] | |
[:cntrl:] | ASCII控制字符(ASCII 0~31, 127) | |
[:digit:] | [0-9] | |
[:graph:] | [:print:]不包括空格 | |
[:lower:] | [a-z] | |
[:punct:] | 既不属于[:alnum:],也不属于[:cntrl:]的字符 | |
[:space:] | [\f\t\n\r\v ] | |
[:upper:] | [A-Z] | |
[:xdigit:] | [a-fA-F0-9] |
重复匹配
- +出现1次及以上,不包括0次。(是一个元字符,需要使用\进行转义)
在[]中出现的类似+,.这样的元字符可以不被转义,可以正常使用,但是转义了也没有坏处。 - *出现0次及以上,包括0次。(是一个元字符,需要使用\进行转义)
- ?出现0次或者1次。(是一个元字符,需要使用\进行转义)
- {} 出现的次数,用来精确匹配。可以是一个确定的数字,也可以是一个区间。
如a{6} 出现6次a a{3,5} 至少3次a,最多5次a
a{3,} 至少出现3次a,上限没有限制 注意: 在匹最好使用\/来进行匹配,防止不必要的麻烦。
+,*,{n,}都是贪婪型匹配,每次都尽可能的匹配更长的字符。若想使用这些的懒惰型匹配,在这些后面添加一个?即可。
贪婪型 | 懒惰型 | |
---|---|---|
* | *? | |
+ | +? | |
{n,} | {n,}? |
位置匹配
正则表达式 | 含义 | |
---|---|---|
\b | 单词边界(用于一个\w与一个\W之间的匹配)| | |
\B | 非单词边界 | |
^ | 字符串开头 | |
$ | 字符串结尾 |
使用子表达式
()
是元字符,使用它们时需要使用转义,用于将一个子表达式合并在一起组成一个完整的部分。
|
或者,
是一个元字符,使用的时候需要使用转义。
回溯引用
指的是模式的后半部分引用在前半部分中定义的子表达式,可以把回溯表达式想象成变量。 \1 代表前面模式里的第一个表达式。(需要用括号括起来)
大小写字母转换
正则表达式 | 含义 | |
---|---|---|
\E | 结束\L或\U转换 | |
\l | 下一个小写 | |
\L | \L和\E之间的全部小写 | |
\u | 下一个大写 | |
\U | \U和\E之间的全部大写 |
前后查找
向前查找
向前查找模式其实就是一个以?=
开头的子表达式,需要匹配的文本跟在=的后面。找到=后面的即可,不消费它,即不把它包括在内。
例子:
.+(?=:)
提示:
任何一个子表达式都可以转换为一个向前查找表达式,只要给它加上一个?=前缀即可。
向后查找
?<=
例子: (?<=\$)寻找$符号但是不消费它
警告:向前查找模式的长度是可变的,它们可以包含
.
和+
之类的元字符,长度很灵活。而向后查找模式只能是固定长度。负向前查找
?!
负向后查找
?<!
嵌入式条件
Regex中的条件用?
来定义
回溯引用中的条件
?(backreferrenc)true-regex)
?(backreferrenc)true-regex|false-regex)前后查找条件