- 正则表达式概念、特点
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,
这个“规则字符串”用来表达对字符串的一种过滤辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
1. 灵活性、逻辑性和功能性非常的强;
2. 可以迅速地用极简单的方式达到字符串的复杂控制。
3. 对于刚接触的人来说,比较晦涩难懂。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,
都可以使用正则表 达式来处理文本内容。
- 正则表达式组成部分
1.字符类(Character Class):如上例的x和y,它们在模式中表?一个字符,但是取值范围是一类字符中的任意一个。
2.数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个x字符,IP地址的每一部分可以有1-3个y字符
3.位置限定符(Anchor):描述各种字符类以及普通字符之间的位置关系,例如邮件地址分三部分,用普通字符@和.隔 开,IP地址分四部分,
用.隔开,每一部分都可以用字符类和数量限定符描述。为了表示位置关系,需要位置限定符的概念,将在下?面介绍
规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普通字符一起表示一个模式,这就是正则表达式(Regular Expression)。
例如email地址的正则表达式可以写成[a- zA-Z0-9_.-][email protected][a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP地址的正则表达式可以写成
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}。随后介绍正则表达式的语法,我们先看看正则表达式在grep中怎么用。例如有这样一个文本?件testfile:
查找其中包含IP地址的行:
grep是?一种查找过滤?工具,正则表达式在grep中?用来查找符合模式的字符串。
egrep相当于grep -E,表?采?Extended正则表达式语法。grep的正则表达式有Basic和Extended两种规范。
另外还有fgrep命令,相当于grep - F,表?示只搜索固定字符串?不搜索正则表达式模式,不会按正则表达式的语法解释后?的参数。
192.168.1.1
1234.234.04.5678
123.4234.045.678
abcde
$ egrep ‘[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}‘ testfile
192.168.1.1
1234.234.04.5678
注意正则表达式参数?单引号括起来了,因为正则表达式中?到的很多特殊字符在Shell中也有特殊含义(例如\),
只有?单引号括起来才能保证这些字符原封不动地传给grep命令,而不会被Shell解释掉。
192.168.1.1符合上述模式,由三个.隔开的四段组成,每段都是1到3个数字,所以这一?被找出来了,可为什么1234.234.04.5678也被找出来了呢?
因为grep找的是包含某一模式的?,这一?包含一个符合模式的字符串234.234.04.567。相反,123.4234.045.678这一?不包含符合模式的字符串,所以不会被找出来。
grep是一种查找过滤工具,正则表达式在grep中用来查找符合模式的字符串。其实正则表达式还有 一个重要的应?是验证用户输入是否合法,
例如用户通过网页表单提交自己的email 地址,就需要用程序验证一下是不是合法的email 地址,这个工作可以在网页的Javascript中做,也可以在?网站后台的程序中做,例如PHP、Perl、Python、Ruby、Java或C,所有这些语?言都?支持正则表达式,可以说,目前不支持正则表达式的编程语言实在很少见。除了编程语?之外,很多UNIX 命令和?工具 也都支持正则表达式,例如grep、vi、sed、awk、emacs等等。“正则表达式”就像“变量”一样,它 是一个?泛的概念,而不是某一种工具或编程语言的特性。
- 正则表达式基本语法(以grep的正则表达式为例)
[字符类]
示例:
[数量限定符]
示例:
再次注意grep找的是包含某一模式的行,而不是完全匹配某一模式的行。
[位置限定符]
示例:
[特殊字符]
示例: