正则表达式工具

正则表达式是什么?

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。

准确的说,正则表达式是一种语言,它可以明确描述文本字符串中的模式,它由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,元字符是一些具有特殊含义的字符。一个正则表达式就是用某种模式去匹配一类字符串的公式。

关于“正则表达式工具”

如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此。由于难于读写,容易出错,所以找一种工具对正则表达式进行测试是很有必要的。“正则表达式工具”正是这样一个软件!

表1.正则表达式常用的元字符
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线。等价于'[A-Za-z0-9_]'。
\s 匹配任意的空白符,包括空格、制表符Tab,换行符、中文全角空格等。
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

字符转义

如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.

例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。

重复

下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):
表2.常用的限定符
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

下面是一些使用重复的例子:

Windows\d+匹配Windows后面跟1个或更多数字

^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)

正则表达式的三种基本运算

  1. 用正则表达式标识分隔符,将字符串拆分为子字符串
  2. 在字符串中搜索匹配正则表达式模式的子字符串
  3. 使用正则表达式标识要替换的文本,以执行查找替换操作

反义

代码/语法说明
\W匹配任意不是字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配任意不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符

常见正则表达式

x|y匹配x或y,例如'z|food'能匹配"z"或"food"。'(z|f)ood'则匹配"zood"或"food"
[xyz]字符集合,匹配所包含的任意一个字符。例如,'[abc]'可以匹配"plain"中的'a'
[^xyz]负值字符集合,匹配不包括的任意字符。