语言的差异
任何语言中都存在着不同的方言和口音,正则表达式语言也是这样。情况似乎是,每一种支持正则表达式的语言都提供自己的“改进”。
正则表达式的目标
一个正则表达式要么能够匹配给定的文本(对egrep来说,就是一行文本)中的某些字符,要么不能匹配。
下面给出了更多的例子
- 变量名:标识符质保函字母、数字以及下划线,但不能以数字开头。可以用正则表达式
[a-zA-Z_][a-zA-Z_0-9]*
来匹配标识符。 - 引号内的字符串:
"[^"]"
。 - 美元金额:
\$[0-9]+(\.[0-9][0-9])?
是一种匹配美元金额的办法。 - HTTP/HTML URL:URL通常的模式是:
http://hostname/path.html
,但是用htm
结尾的也很正常。可以写一个正则来大致匹配:\<http://[a-z0-9_.:]+/[-a-z0-9_:@&?=+,.!/~*%$]*\.html?\>
。虽然写的较好,但上述还是可能匹配到不合法的URL - HTML tag:要匹配想
<title>
这样的标签最简单的可能会想到使用<.*>
,但是会匹配到不止一个tag的内容 - 表示时刻的文字,例如“9:17 am”或“12:30 pm”。
(1[012]|[1-9]):[0-5][0-9]。(am|pm)
。
正则表达式属于汇总
正则(regex)
作为正则表达式的简称
匹配
一个正则表达式“匹配”一个字符串,其实指的是这个正则表达式能在字符串中找到匹配文本。
元字符
一个字符是否是元字符(或者是元字符序列,这两个概念是相等的),取决于应用的具体情况。正则表达式的流派不同,关于转义的规定也不同。
流派
不同的流派具有的元字符具有一定的差异
流派和工具不是相等的,
子表达式
例子:正则^(Subject|Date):。*
中,可以有以下子表达式:
Subject|Date
、Subject
和Date
也可以是,甚至连S
、u
等单词也是可以成为子表达式。
字符
常常与编码结合才有意义,也就是不同的编码字符有不同含义。
学习正则的几个要点
- 正则表达式的使用
- 正则表达式的特性:选择合适的工具是成功的一半
- 正则表达式的工作原理:正则表达式引擎不同,工作原理也不同。
弄懂原理才是真正理解的关键。