正则表达式基本
依据正则表达法这套标准,来用几个符号组成的正则表达式表示一定规则的字符串。通过正则表达式,方便地让计算机理解我们想要表达的一长串字符串。
对于一些查找、删除、替换等等支持正则表达式的工具,可以用正则表达式来理解我们想要告诉计算机的字符串,并根据工具或者接口本身的功能和作用来对我们选定的字符串进行处理。
正则表达式的特殊符号
1 | # 收录,方便查表 |
grep与正则表达式
grep命令
参数说明:
-a :将 binary 档案以 text 档案的方式搜寻数据(一般可执行的比如shell脚本就是binary档案)
-c :计算找到 ‘搜寻字符串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,即显示出没有 ‘搜寻字符串’ 内容的那一行
示例:
1 | grep -n 'the' test.txt # 查找有“the”的字符串 |
字符组匹配:
1 | grep -n 't[ea]st' test.txt # 查找包含test或者tast的字符串 |
[]表示包含这里面的所有字符中的一个,有且只有一个。
[n1-n2]表示搜索指定的字符串范围,例如[0-9]、[a-z] 、[A-Z]等
[^…]表示这里面所有的字符都不要
行首符:^ 与 行尾符:$
1 | grep -n 'Mr.Zhou' zhzh.txt # 查找“Mr.Zhou”为开头的字符串 |
任意一个字符 “.” 与 重复相同字符 “*”
1 | # *(星号):代表重复前面 0 个或者多个字符。 |
限定连续字符范围
{ }可限制一个范围区间内的重复字符数。举个例子,若要找出 2~5 个 o 的连续字符串,此时便要用到{}了。由于 { 与 } 在 shell 中有特殊意义,需要用到转义字符\。
1 | grep -n 'z\{5\}h' zhzh.txt # 查找字符串“z” + “5个z” + “h” |
Java与正则表达式
正则表达式中常用的元字符
元字符 | 正则表达式中的写法 | 意 义 |
---|---|---|
. | . | 代表任意一个字符 |
\d | \\d | 0~9任意一个数字 |
\D | \\D | 任意一个不是数字的字符 |
\s | \\s | 空白符号“\t”、“\n”(把字符串根据空格分割为字符串数组) |
\S | \\S | 任意一个非空白符号 |
\w | \\w | 代表可以用作标识符的字符,除了“$”(看示例程序) |
\W | \\W | 代表不可以用作标识符的字符 |
\p{Lower} | \\p{Lower} | 小写字母a~z |
\p{Upper} | \\p{Upper} | 大写字母A~Z |
\p{ASCLL} | \\p{ASCLL} | ASCLL字符 |
\p{Alpha} | \\p{Alpha} | 字母字符 |
\p{Digit} | \\p{Digit} | 十进制数字 |
\p{Alnum} | \\p{Alnum} | 数字或者字母 |
\p{Punct} | \\p{Punct} | 标点符号 |
未完待续……………… |
“[ ]” 的使用
[a-zA-z] 任意一个大写或者小写字母
[a-e[g-z]] a~e或者g~z中的任意一个字母
[a-o&&[def]] a~o和[def]的交集,也就是d、e、f
[a-d&&[^bc]] a~d和[^bc]的交集,a~d减去[bc]的差运算,即a、d
限定修饰符
|限定修饰符|意 义|示 例|
|—|—|—|—|
|?|0次或者多次|A?|
||0次或者多次|A|
|+|一次或者多次|A+|
|{n}|正好出现n次|A{2}|
|{n,}|至少出现n次|A{3,}|
|{n,m}|出现n~m次|A{2,6}|
示例程序
1 | package xyz.zhzh; |