在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。
准确的说,正则表达式是一种语言,它可以明确描述文本字符串中的模式,它由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,元字符是一些具有特殊含义的字符。一个正则表达式就是用某种模式去匹配一类字符串的公式。
如果你不觉得正则表达式很难读写的话,要么你是一个天才,要么,你不是地球人。正则表达式的语法很令人头疼,即使对经常使用它的人来说也是如此。由于难于读写,容易出错,所以找一种工具对正则表达式进行测试是很有必要的。“正则表达式工具”正是这样一个软件!
代码 | 说明 |
---|---|
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线。等价于'[A-Za-z0-9_]'。 |
\s | 匹配任意的空白符,包括空格、制表符Tab,换行符、中文全角空格等。 |
\d | 匹配数字 |
\b | 匹配单词的开始或结束 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
如果你想查找元字符本身的话,比如你查找.,或者*,就出现了问题:你没办法指定它们,因为它们会被解释成别的意思。这时你就得使用\来取消这些字符的特殊意义。因此,你应该使用\.和\*。当然,要查找\本身,你也得用\\.
例如:unibetter\.com匹配unibetter.com,C:\\Windows匹配C:\Windows。
下面是正则表达式中所有的限定符(指定数量的代码,例如*,{5,12}等):
代码/语法 | 说明 |
---|---|
* | 重复零次或更多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n,m} | 重复n到m次 |
下面是一些使用重复的例子:
Windows\d+匹配Windows后面跟1个或更多数字
^\w+匹配一行的第一个单词(或整个字符串的第一个单词,具体匹配哪个意思得看选项设置)
代码/语法 | 说明 |
---|---|
\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] | 负值字符集合,匹配不包括的任意字符。 |