前言:正则表达式,又称正规表示法、常规表示法。(Regular Expression):正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言(PHP、C#、Java、C++、Objective-c、Swift、VB、Javascript、Ruby以及Python)都支持利用正则表达式进行字符串操作。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。
简单来说:正则表达式可以理解为通过描述某种规则达到某种模式匹配,这种规则称为正则表达式。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
正则表达式由一些普通字符和一些元子符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。eg:在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"testing123"等字符串,但是不能匹配"Testing"。(未包含元子符)
一个正则表达式由三部分组成:字符类(描述字符串包含字符特点),数量限定符(字符串中相应字符个数),位置限定符(字符串中字符位置特点)。
规定一些特殊语法表示字符类、数量限定符和位置关系,然后将这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。
注:注意正则表达式参数用单引号括起来了,因为正则表达式中用到的很多特殊字符在Shell中也有特殊 含义(例如\),只有用单引号括起来才能保证这些字符原封不动地传给grep命令,而不会被Shell解释掉。
1.grep:文本过滤工具。它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。正则表达式在grep中用来查找符合模式的字符串,grep找的是包含某个模式的行。
egrep相当于grep -E,表示采用Extended正则表达式语法。 grep的正则表达式有Basic和Extended两种规范。二者的区别主要在于对上图中特殊字符的解析。
对于Basic模式来说,字符?+{}|()应解释为普通字符,要表示上述特殊含义则需要加\转义。
而对于Extend模式来说,字符?+{}|()应解释为特殊字符,要表示普通字面含义则需要加\转义。
具体例子:
IP地址的合法性判别
最终grep匹配合法IP表达式
grep 选项测试