1、什么是正则表达式
正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊的符号的辅助,可以让用户轻易达到查找、删除、替换某特定字符串的处理程序。正则表达式基本上是一种“表示法”,只要工具程序支持这种表示法,那么该工具程序就可以用来作为正则表达式的字符串处理之用。常用的工具有vi、grep 、awk 及sed 等。
2、语系对正则表达式的影响
在使用正则表达式时,需要特别注意当时的环境的语系为何,否则可能会发现与别人的不相同的选取结果。通常用的语系设置是 “LANG=C”
另外为了避免因为语系的不同英和数字的选取问题,我们需要记住以下一些常用的特殊符号
特殊符号 | 代表意义 |
---|---|
[:alnum:] | 代表英文大小写及数字,即0-9、 A-Z、a-z |
[:alpha:] | 代表英文大小写字符,即 A-Z,a-z |
[:digit:] | 代表数字 即 0-9 |
[:lower:] | 代表小写字母 a-z |
[:upper:] | 代表大写字母 A-z |
备注:查找字符串的常用操作示例
//查找在文本中不包含字符的操作使用-v 其中n 表示显示
grep -vn 'the' regular_express.txt
//忽略大小写的操作
grep -in 'the' regular_express.txt
3、基础正则表达式常用操作总结
字符 | 描述 | 示例 |
---|---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符 | {} 因为{与}的符号在shell中是有特殊意义的,必须要使用\的转意它 |
^ | 通常情况下表示行首,但是如果^出现在[]中则表示‘反向选择’ | ^[a-z]表示以小写字母开头的行,^[^a-zA-Z] 表示不以字母开头的行 |
. | 代表一定有一个任意字符的字符 | 例如:grep -n ‘e.e’ test.txt 可以匹配到exe ,eae等 |
$ | 行尾符 | google$ 表示以google 结尾的行 |
* | 匹配前一个字符(前面的子表达式)零次或多次 | 例如,zo* 能匹配 “z” 以及 “zoo”。 * 等价于{0,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次 | 例如:’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。 |
{n,} | n 是一个非负整数。至少匹配n 次 | 例如:’o{2,}’ 不能匹配 “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?’。请注意在逗号和两个数之间不能有空格。 |
4、扩展正则表达式常用操作总结
字符 | 描述 | 示例 |
---|---|---|
+ | 匹配前一个字符(前面的子表达式)一次或多次 | 例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次 | 例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。 |
| | 用或(or)的方式找出数个字符串 | 例如:搜寻gd或good这两个字符串egrep -n ‘gd|good’ test.txt |
() | 找出群组字符串 | 例如:搜寻(glad)或者(good)这两个字符串,因为g与d是重复的,所以,我就可以将la与oo列于()当中,并以 |
()+ | 多个重群组的判别 | 例如:将AxyzxyzxyzxyzC用echo叫出,然后再使用如下方法搜寻 egrep ‘A(xyz)+C’ test.txt上面的例子意思是说,我要找开头是A结尾是C,中间有一个以上的“xyz”字符串的意思。 |
备注:如果包含了扩展正则表达式中的符号,则需要使用egrep