标签:git 多行模式 高级语言 shell pcr 规则 优先级 模式 table
通配符通常用来匹配文件、目录
* |
匹配任意长度的任意字符,可以是0个 |
? |
匹配任意单个字符,必须是1个 |
[ ] |
匹配指定字符范围内的任意单个字符 |
[a-z,A-Z,0-9] |
匹配所有数字字母,可以不加逗号 |
[a-z] |
表示取a..z的所有字符 |
[A-Z] |
表示A,B.....Z |
[a-Z] |
表示所有大小写字母 |
[:upper:] |
所有大写字母 |
[:lower:] |
所有小写字母 |
[:alpha:] |
所有字母,大小写 |
[:digit:] |
所有数字 |
[:alnum:] |
所有数字和字母 |
[:space:] |
空白字符 |
[:punct:] |
标点符号 |
[^] |
匹配指定字符范围外的任意单个字符 同[!] |
[^0-9] |
相当于[^[:digit:]] |
[^a-z] |
所有非a..z的字符 |
[^A-Z] |
所有非A..Z的字符 |
正则表达式Regular Expression,缩写RE,是文本处理极为重要的技术,用它可以对字符串按照某种规则进行检索、替换。正则表达式应用极其广泛,shell中文本处理命令、各种高级编程语言都支持正则。
1、BRE
基本正则表达式,grep、sed等都支持。
2、ERE
扩展正则表达式,egrep(grep -E)、sed -r等。
3、PCRE
几乎所有高级语言都是PCRE的方言或变种。
代码 | 说明 | 举例 |
Basic RegEx |
Extend RegEx |
Python |
. | 匹配除换行符以外的任意一个字符 | . | . | . | . |
[abc] | 字符集合,匹配集合中的任意一个字符 | [abc]匹配plain中的‘a‘ | [abc] | [abc] | [abc] |
[^abc] | 字符集合,只能表示一个字符位置。 匹配除去集合内字符的任意一个字符 |
[^abc]可以匹配plain中的‘p‘,‘l‘,‘i‘,‘n‘ | [^abc] | [^abc] | [^abc] |
[a-Z] | 自付范围,也是集合,表示一个字符位置 匹配包含的任意一个字符 |
常用的有[A-Z][0-9] | [a-Z] | [a-Z] | [a-Z] |
[^a-Z] | 字符范围,也是个集合,表示一个字符位置 匹配去除集合内字符的任意一个字符 |
[^a-Z] | [^a-Z] | [^a-Z] | |
\b | 匹配单词边界 | \bb在文本中查找以b开头的字符 | \b | \b | \b |
\B | 不匹配单词边界 | t\B包含t的单词但是不以t结尾的t字符,例如write \Bb不以b开头但含有b的单词,如able |
\B | \B | \B |
\t | 匹配一个横向制表符 | 不支持 | 不支持 | ||
\v | 匹配一个垂直制表符 | 不支持 | 不支持 | ||
\s | 匹配1位空白字符,包括换行符、制表符、空格 [\f\r\n\t\v],\f表示换页,\v表示垂直制表符 |
不支持 | 不支持 | ||
\S | 匹配一位非空白字符 | 不支持 | 不支持 | ||
\d | 同[0-9],匹配一位数字 | \d | 不支持 | 不支持 | |
\D | 同[^0-9],匹配一位非数字 | 不支持 | 不支持 | ||
\w | 匹配[a-zA-z0-9_],包含中文 | \w | \w | \w | \w |
\W | 匹配\w之外的字符 | \W | \W | \W | |
\<pattern\> | \<词首锚定,\>词尾锚定,这两个和\b相同 | \<abc\>匹配单词abc等价\babc\b |
. 点号可以匹配所有字符,包括换行符
^ 表示整个字符串的开头,$表示结尾
.点号可以匹配所有字符,但不包括换行符
^ 表示整个字符串的开头,$表示结尾,开始指的是\n后紧接着下一个字符,结束指的是\n前的字符
代码 | 说明 | 举例 |
* | 表示前面正则表达式匹配的内容 会重复0次或多次 |
e\w*单词中有e,后面是非空白字符 |
+ | 表示前面正则表达式重复至少1次 | e\w+单词中e后面至少有一个非空白字符 |
? | 表示前面的正则表达式会重复0次或1次 | e\w?单词e后至多有一个非空白字符 |
{n} | 重复n次 | |
{n,} | 重复至少n次 |
e\w{1,}等价e\w+ e\w{0,}等价e\w* e\w{0,1}等价e\w? |
{n,m} | 重复n到m次 | e\w{1,10}单词中e后面至少一个最多10个非空白字符 |
代码 | 说明 | 举例 |
x|y | 匹配x或匹配y | w|food 或者 (w|f)ood |
捕获 | ||
(pattern) |
使用小括号指定一个子表达式,也叫分组 捕获后会自动分配组号,从1开始,可以改变优先级 |
|
\数字 | 匹配对应的分组 | (very)\1表示匹配 very very,分组是very |
(?:pattern) | 如果仅仅为了改变优先级,不需要捕获分组 |
(?:w|f)ood ‘industr(?:y|ies)‘ 等价 ‘industry|industries‘ |
(?<name>exp)或 (?‘name‘exp) |
分组捕获,但是可以通过那么访问分组, Python语法必须是(?P<name>exp) |
|
零宽断言 | ||
(?=exp) |
零宽度正预测先行断言 断言exp一定出现在匹配字符的右边 也就是说匹配字符的后面一定有exp |
f(?=ood)f后面一定有ood出现 |
(?<=exp) |
零宽度正回顾后发断言 断言exp一定出现在匹配字符的左边 也就是说匹配字符前面一定有exp |
(?<=\d{3})o{1,2}p表示匹配oop的字符串前面一定有三个数字 |
负向零宽断言 | ||
(?!exp) |
零宽度负预测先行断言 断言exp一定不会出现在右侧, 也就是说断言后面一定不是exp |
\d{3}(?!\d)表示匹配3位数字且三位数字后 一定不是数字 foo(?!d)表示foo的后面一定不是d |
(?<!exp) |
零宽度负回顾后发断言 断言exp一定不会出现在左侧, 也就是说断言前面一定不是exp |
(?<!f)ood表示ood的前面一定不是f |
注释 | ||
(?#comment) | 注释 | f(?=oo) |
代码 | 说明 |
*? | 匹配任意次,但尽可能少重复 |
+? | 匹配至少1次,尽可能少重复 |
?? | 匹配0或1次,尽可能少重复 |
{n,}? | 匹配至少n次,尽可能少重复 |
{n,m}? | 匹配至少n次,至多m次,尽量少匹配 |
标签:git 多行模式 高级语言 shell pcr 规则 优先级 模式 table
原文地址:https://www.cnblogs.com/zh-dream/p/12392911.html