网站域名,网站建设登录结构图,用校园网如何搭建WordPress,做服装商城网站论文From: http://www.usidcbbs.com/read-htm-tid-1457.html
Perl 中的正则表达式 正则表达式是 Perl 语言的一大特色#xff0c;也是 Perl 程序中的一点难点#xff0c;不过如果大家能够很好的掌握他#xff0c;就可以轻易地用正则表达式来完成字符串处理的任务#xff0…From: http://www.usidcbbs.com/read-htm-tid-1457.html
Perl 中的正则表达式
正则表达式是 Perl 语言的一大特色也是 Perl 程序中的一点难点不过如果大家能够很好的掌握他就可以轻易地用正则表达式来完成字符串处理的任务当然在 CGI 程序设计中就更能得心应手了。下面我们列出一些正则表达式书写时的一些基本语法规则。1 正则表达式的三种形式 首先我们应该知道 Perl 程序中正则表达式有三种存在形式他们分别是 匹配m/regexp/ 还可以简写为 /regexp/ 略去 m 替换s/pattern/replacement/ 转化tr/pattern/replacemnt/ 这三种形式一般都和 ~ 或 !~ 搭配使用其中 ~ 表示相匹配在整条语句中读作 does!~ 表示不匹配在整条语句中读作 doesnt并在左侧有待处理的标量变量。如果没有该变量和 ~ !~ 操作符则默认为处理 $_ 变量中的内容。举例如下 $str I love Perl; $str ~ m/Perl/; # 表示如果在 $str 中发现 Perl 字符串则返回 1 否则返回 0。 $str ~ s/Perl/BASH/; # 表示将变量 $str 中的 Perl 字符串替换为 BASH如果发生此替换则返回 1否则返回 0。 $str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母如果转化发生了则返回 0否则返回 1。 另外还有 foreach (array) { s/a/b/; } # 此处每次循环将从 array 数组中取出一个元素存放在 $_ 变量中并对 $_ 进行替换处理。 while (FILE) { print if (m/error/); } # 这一句稍微复杂一些他将打印 FILE 文件中所有包含 error 字符串的行。 Perl 的正则表达式中如果出现 () 则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子 $string I love perl; $string ~ s/(love)/$1/; # 此时 $1 love并且该替换的结果是将 $string 变为 I love perl $string i love perl; $string ~ s/(i)(.*)(perl)/$3$2$1/; # 这里 $1 i$2 love $3 perl并且替换后 $string 变为 perl love i 替换操作 s/pattern/replacement/ 还可以在末尾加上 e 或 g 参数他们的含义分别为 s/pattern/replacement/g 表示把待处理字符串中所有符合 pattern 的模式全部替换为 replacement 字符串而不是只替换第一个出现的模式。 s/pattern/replacement/e 表示将把 replacemnet 部分当作一个运算符这个参数用的不多。 比如下面的例子 $string i:love:perl; $string ~ s/:/*/; #此时 $stringi*love:perl; $string i:love:perl; $string ~ s/:/*/g; #此时 $stringi*love*perl; $string ~ tr/*/ /; #此时 $stringi love perl; $string www22cgi44; $string ~ s/(\d)/$1*2/e; # (/d)代表 $string 中的一个或多个数字字符将这些数字字符执行 *2 的操作因此最后 $string 变成了 www44cgi88。 下面给出一个完整的例子 #!/usr/bin/perl print请输入一个字符串!\n; $string STDIN; # STIDN代表标准输入会让使用者输入一字符串 chop($string); # 将$string最后一个换行的字符\n删除掉 if($string ~ /perl/){ print(输入的字符串中有 perl 这个字符串!\n; } 如果输入的字符串含有 perl 这个字符串的话就会显示后面的提示信息。 2 正则表达式中的常用模式 下面是正则表达式中的一些常用模式。 /pattern/ 结果 . 匹配除换行符以外的所有字符 x? 匹配 0 次或一次 x 字符串 x* 匹配 0 次或多次 x 字符串但匹配可能的最少次数 x 匹配 1 次或多次 x 字符串但匹配可能的最少次数 .* 匹配 0 次或一次的任何字符 . 匹配 1 次或多次的任何字符 {m} 匹配刚好是 m 个 的指定字符串 {m,n} 匹配在 m个 以上 n个 以下 的指定字符串 {m,} 匹配 m个 以上 的指定字符串 [] 匹配符合 [] 内的字符 [^] 匹配不符合 [] 内的字符 [0-9] 匹配所有数字字符 [a-z] 匹配所有小写字母字符 [^0-9] 匹配所有非数字字符 [^a-z] 匹配所有非小写字母字符 ^ 匹配字符开头的字符 $ 匹配字符结尾的字符 \d 匹配一个数字的字符和 [0-9] 语法一样 \d 匹配多个数字字符串和 [0-9] 语法一样 \D 非数字其他同 \d \D 非数字其他同 \d \w 英文字母或数字的字符串和 [a-zA-Z0-9] 语法一样 \w 和 [a-zA-Z0-9] 语法一样 \W 非英文字母或数字的字符串和 [^a-zA-Z0-9] 语法一样 \W 和 [^a-zA-Z0-9] 语法一样 \s 空格和 [\n\t\r\f] 语法一样 \s 和 [\n\t\r\f] 一样 \S 非空格和 [^\n\t\r\f] 语法一样 \S 和 [^\n\t\r\f] 语法一样 \b 匹配以英文字母,数字为边界的字符串 \B 匹配不以英文字母,数值为边界的字符串 a|b|c 匹配符合a字符 或是b字符 或是c字符 的字符串 abc 匹配含有 abc 的字符串 (pattern) () 这个符号会记住所找寻到的字符串是一个很实用的语法。第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量以此类推下去。 /pattern/i i 这个参数表示忽略英文大小写也就是在匹配字符串的时候不考虑英文的大小写问题。 \ 如果要在 pattern 模式中找寻一个特殊字符如 *则要在这个字符前加上 \ 符号这样才会让特殊字符失效 下面给出一些例子 范例 说明 /perl/ 找到含有 perl 的字符串 /^perl/ 找到开头是 perl 的字符串 /perl$/ 找到结尾是 perl 的字符串 /c|g|i/ 找到含有 c 或 g 或 i 的字符串 /cg{2,4}i/ 找到 c 后面跟着 2个到 4个 g 再跟着 i 的字符串 /cg{2,}i/ 找到 c 后面跟着 2个以上 g 再跟着 i 的字符串 /cg{2}i/ 找到 c 后面跟着 2个 g再跟着 i 的字符串 /cg*i/ 找到 c 后面跟着 0个或多个 g 再跟着 i 的字符串如同/cg{0,1}i/ /cgi/ 找到 c 后面跟着一个以上 g再跟着 i 的字符串如同/cg{1,}i/ /cg?i/ 找到 c 后面跟着 0个或是 1个 g 再跟着 i 的字符串如同/cg{0,1}i/ /c.i/ 找到 c 后面跟着一个任意字符再跟着 i 的字符串 /c..i/ 找到 c 后面跟着二个任意字符再跟着 i 的字符串 /[cgi]/ 找到符合有这三个字符任意一个的字符串 /[^cgi]/ 找到没有这三个字符中任意一个的字符串 /\d/ 找寻符合数字的字符可以使用/\d/来表示一个或是多个数字组成的字符串 /\D/ 找寻符合不是数字的字符可以使用/\D/来表示一个或是更多个非数字组成的字符串 /\*/ 找寻符合 * 这个字符因为 * 在常规表达式中有它的特殊意思所以要在这个特殊符号前加上 \ 符号这样才会让这个特殊字符失效 /abc/i 找寻符合 abc 的字符串而且不考虑这些字符串的大小写 3 正则表达式的八大原则 如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能所以对字符串的处理能力非常强。在Perl语言的程序中经常可以看到正则表达式的运用在 CGI 程序设计中也不例外。 正则表达式是初学 Perl 的难点所在不过只要一旦掌握其语法你就可以拥有几乎无限的模式匹配能力而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。 正则表达式在对付数据的战斗中可形成庞大的联盟——这常常是一场战争。我们要记住下面八条原则 · 原则1正则表达式有三种不同形式(匹配(m/ /)替换(s/ / /eg)和转换(tr/ / /))。 · 原则2正则表达式仅对标量进行匹配( $scalar ~ m/a/; 可以工作; array ~ m/a/ 将把array作为标量对待因此可能不会成功)。 · 原则3正则表达式匹配一个给定模式的最早的可能匹配。缺省时仅匹配或替换正则表达式一次( $a string string2; $a ~ s/string/ /; 导致 $a string 2)。 · 原则4正则表达式能够处理双引号所能处理的任意和全部字符( $a ~ m/$varb/ 在匹配前把varb扩展为变量如果 $varb a $a as$a ~ s/$varb/ /; 等价于 $a ~ s/a/ /; 执行结果使 $a s )。 · 原则5正则表达式在求值过程中产生两种情况结果状态和反向引用 $a~ m/pattern/ 表示 $a 中是否有子串 pattern 出现$a ~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。 · 原则6正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a ~ m/\w/ 匹配一个或多个单词字符$a ~ m/\d/ 匹配零个或多个数字。 · 原则7如果欲匹配不止一个字符集合Perl使用 | 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。 · 原则8Perl用 (?..) 语法给正则表达式提供扩展功能。这一点请同学们课后看相关资料 想要学习所有这些原则我建议大家先从简单的开始并且不断的尝试和实验。实际上如果学会了 $a ~ m/ERROR/ 是在 $a 中查找子串ERROR那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。 正则表达式语法一个正则表达式就是由普通字符例如字符 a 到 z以及特殊字符称为元字符组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板将某个字符模式与所搜索的字符串进行匹配。 这里有一些可能会遇到的正则表达式示例 Visual Basic Scripting Edition VBScript 匹配 /^\[ \t]*$/ ^\[ \t]*$ 匹配一个空白行。 /\d{2}-\d{5}/ \d{2}-\d{5} 验证一个ID 号码是否由一个2位数字一个连字符以及一个5位数字组成。 /(.*).*\/\1/ (.*).*\/\1 匹配一个 HTML 标记。 下表是元字符及其在正则表达式上下文中的行为的一个完整列表 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如n 匹配字符 n。\n 匹配一个换行符。序列 \\ 匹配 \ 而 \( 则匹配 (。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性^ 也匹配 \n 或 \r 之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性$ 也匹配 \n 或 \r 之前的位置。 * 匹配前面的子表达式零次或多次。例如zo* 能匹配 z 以及 zoo。 * 等价于{0,}。 匹配前面的子表达式一次或多次。例如zo 能匹配 zo 以及 zoo但不能匹配 z。 等价于 {1,}。 ? 匹配前面的子表达式零次或一次。例如do(es)? 可以匹配 do 或 does 中的do 。? 等价于 {0,1}。 {n} n 是一个非负整数。匹配确定的 n 次。例如o{2} 不能匹配 Bob 中的 o但是能匹配 food 中的两个 o。 {n,} n 是一个非负整数。至少匹配n 次。例如o{2,} 不能匹配 Bob 中的 o但能匹配 foooood 中的所有 o。o{1,} 等价于 o。o{0,} 则等价于 o*。 {n,m} m 和 n 均为非负整数其中n m。最少匹配 n 次且最多匹配 m 次。刘 o{1,3} 将匹配 fooooood 中的前三个 o。o{0,1} 等价于 o?。请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符 (*, , ?, {n}, {n,}, {n,m}) 后面时匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如对于字符串 ooooo? 将匹配单个 o而 o 将匹配所有 o。 . 匹配除 \n 之外的任何单个字符。要匹配包括 \n 在内的任何字符请使用象 [.\n] 的模式。 (pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到在VBScript 中使用 SubMatches 集合在Visual Basic Scripting Edition 中则使用 $0…$9 属性。要匹配圆括号字符请使用 \( 或 \)。 (?:pattern) 匹配 pattern 但不获取匹配结果也就是说这是一个非获取匹配不进行存储供以后使用。这在使用 或 字符 (|) 来组合一个模式的各个部分是很有用。例如 industr(?:y|ies) 就是一个比 industry|industries 更简略的表达式。 (?pattern) 正向预查在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配也就是说该匹配不需要获取供以后使用。例如 Windows (?95|98|NT|2000) 能匹配 Windows 2000 中的 Windows 但不能匹配 Windows 3.1 中的 Windows。预查不消耗字符也就是说在一个匹配发生后在最后一次匹配之后立即开始下一次匹配的搜索而不是从包含预查的字符之后开始。 (?!pattern) 负向预查在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配也就是说该匹配不需要获取供以后使用。例如Windows (?!95|98|NT|2000) 能匹配 Windows 3.1 中的 Windows但不能匹配 Windows 2000 中的 Windows。预查不消耗字符也就是说在一个匹配发生后在最后一次匹配之后立即开始下一次匹配的搜索而不是从包含预查的字符之后开始 x|y 匹配 x 或 y。例如z|food 能匹配 z 或 food。(z|f)ood 则匹配 zood 或 food。 [xyz] 字符集合。匹配所包含的任意一个字符。例如 [abc] 可以匹配 plain 中的 a。 [^xyz] 负值字符集合。匹配未包含的任意字符。例如 [^abc] 可以匹配 plain 中的p。 [a-z] 字符范围。匹配指定范围内的任意字符。例如[a-z] 可以匹配 a 到 z 范围内的任意小写字母字符。 [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如[^a-z] 可以匹配任何不在 a 到 z 范围内的任意字符。 \b 匹配一个单词边界也就是指单词和空格间的位置。例如 er\b 可以匹配never 中的 er但不能匹配 verb 中的 er。 \B 匹配非单词边界。er\B 能匹配 verb 中的 er但不能匹配 never 中的 er。 \cx 匹配由x指明的控制字符。例如 \cM 匹配一个 Control-M 或回车符。 x 的值必须为 A-Z 或 a-z 之一。否则将 c 视为一个原义的 c 字符。 \d 匹配一个数字字符。等价于 [0-9]。 \D 匹配一个非数字字符。等价于 [^0-9]。 \f 匹配一个换页符。等价于 \x0c 和 \cL。 \n 匹配一个换行符。等价于 \x0a 和 \cJ。 \r 匹配一个回车符。等价于 \x0d 和 \cM。 \s 匹配任何空白字符包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 \t 匹配一个制表符。等价于 \x09 和 \cI。 \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。 \w 匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]。 \W 匹配任何非单词字符。等价于 [^A-Za-z0-9_]。 \xn 匹配 n其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如 \x41 匹配 A。\x041 则等价于 \x04 1。正则表达式中可以使用 ASCII 编码。. \num 匹配 num其中 num 是一个正整数。对所获取的匹配的引用。例如(.)\1 匹配两个连续的相同字符。 \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式则 n 为后向引用。否则如果 n 为八进制数字 (0-7)则 n 为一个八进制转义值。 \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式则 nm 为后向引用。如果 \nm 之前至少有 n 个获取则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足若 n 和 m 均为八进制数字 (0-7)则 \nm 将匹配八进制转义值 nm。 \nml 如果 n 为八进制数字 (0-3)且 m 和 l 均为八进制数字 (0-7)则匹配八进制转义值 nml。 \un 匹配 n其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如 \u00A9 匹配版权符号 (?)。 正则表达式是一种文本模式包括普通字符例如a 到 z 之间的字母和特殊字符称为“
元字符
”。模式描述在搜索文本时要匹配的一个或多个字符串。
正则表达式示例表达式 匹配 /^\s*$/ 匹配空行。 /\d{2}-\d{5}/ 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号。 /\s*(\S)(\s[^]*)?[\s\S]*\s*\/\1\s*/ 匹配 HTML 标记。 下表包含了元字符的完整列表以及它们在正则表达式上下文中的行为 字符 说明 \ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如“n”匹配字符“n”。“\n”匹配换行符。序列“\\”匹配“\”“\(”匹配“(”。 ^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性^ 还会与“\n”或“\r”之后的位置匹配。 $ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性$ 还会与“\n”或“\r”之前的位置匹配。 * 零次或多次匹配前面的字符或子表达式。例如zo* 匹配“z”和“zoo”。* 等效于 {0,}。 一次或多次匹配前面的字符或子表达式。例如“zo”与“zo”和“zoo”匹配但与“z”不匹配。 等效于 {1,}。 ? 零次或一次匹配前面的字符或子表达式。例如“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1}。 {n} n 是非负整数。正好匹配 n 次。例如“o{2}”与“Bob”中的“o”不匹配但与“food”中的两个“o”匹配。 {n,} n 是非负整数。至少匹配 n 次。例如“o{2,}”不匹配“Bob”中的“o”而匹配“foooood”中的所有 o。“o{1,}”等效于“o”。“o{0,}”等效于“o*”。 {n,m} M 和 n 是非负整数其中 n m。匹配至少 n 次至多 m 次。例如“o{1,3}”匹配“fooooood”中的头三个 o。o{0,1} 等效于 o?。注意您不能将空格插入逗号和数字之间。 ? 当此字符紧随任何其他限定符*、、?、{n}、{n,}、{n,m}之后时匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如在字符串“oooo”中“o?”只匹配单个“o”而“o”匹配所有“o”。 . 匹配除“\n”之外的任何单个字符。若要匹配包括“\n”在内的任意字符请使用诸如“[\s\S]”之类的模式。 (pattern) 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果“匹配”集合中检索捕获的匹配。若要匹配括号字符 ( )请使用“\(”或者“\)”。 (?:pattern) 匹配 pattern 但不捕获该匹配的子表达式即它是一个非捕获匹配不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用。例如industr(?:y|ies) 是比 industry|industries 更经济的表达式。 (?pattern) 执行正向预测先行搜索的子表达式该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配即不能捕获供以后使用的匹配。例如Windows (?95|98|NT|2000) 匹配“Windows 2000”中的“Windows”但不匹配“Windows 3.1”中的“Windows”。预测先行不占用字符即发生匹配后下一匹配的搜索紧随上一匹配之后而不是在组成预测先行的字符后。 (?!pattern) 执行反向预测先行搜索的子表达式该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配即不能捕获供以后使用的匹配。例如Windows (?!95|98|NT|2000) 匹配“Windows 3.1”中的 “Windows”但不匹配“Windows 2000”中的“Windows”。预测先行不占用字符即发生匹配后下一匹配的搜索紧随上一匹配之后而不是在组成预测先行的字符后。 x|y 匹配 x 或 y。例如z|food 匹配“z”或“food”。(z|f)ood 匹配“zood”或“food”。 [xyz] 字符集。匹配包含的任一字符。例如“[abc]”匹配“plain”中的“a”。 [^xyz] 反向字符集。匹配未包含的任何字符。例如“[^abc]”匹配“plain”中的“p”。 [a-z] 字符范围。匹配指定范围内的任何字符。例如“[a-z]”匹配“a”到“z”范围内的任何小写字母。 [^a-z] 反向范围字符。匹配不在指定的范围内的任何字符。例如“[^a-z]”匹配任何不在“a”到“z”范围内的任何字符。 \b 匹配一个字边界即字与空格间的位置。例如“er\b”匹配“never”中的“er”但不匹配“verb”中的“er”。 \B 非字边界匹配。“er\B”匹配“verb”中的“er”但不匹配“never”中的“er”。 \cx 匹配 x 指示的控制字符。例如\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间。如果不是这样则假定 c 就是“c”字符本身。 \d 数字字符匹配。等效于 [0-9]。 \D 非数字字符匹配。等效于 [^0-9]。 \f 换页符匹配。等效于 \x0c 和 \cL。 \n 换行符匹配。等效于 \x0a 和 \cJ。 \r 匹配一个回车符。等效于 \x0d 和 \cM。 \s 匹配任何空白字符包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。 \S 匹配任何非空白字符。与 [^ \f\n\r\t\v] 等效。 \t 制表符匹配。与 \x09 和 \cI 等效。 \v 垂直制表符匹配。与 \x0b 和 \cK 等效。 \w 匹配任何字类字符包括下划线。与“[A-Za-z0-9_]”等效。 \W 与任何非单词字符匹配。与“[^A-Za-z0-9_]”等效。 \xn 匹配 n此处的 n 是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如“\x41”匹配“A”。“\x041”与“\x04”“1”等效。允许在正则表达式中使用 ASCII 代码。 \num 匹配 num此处的 num 是一个正整数。到捕获匹配的反向引用。例如“(.)\1”匹配两个连续的相同字符。 \n 标识一个八进制转义码或反向引用。如果 \n 前面至少有 n 个捕获子表达式那么 n 反向引用。否则如果 n 是八进制数 (0-7)那么 n 是八进制转义码。 \nm 标识一个八进制转义码或反向引用。如果 \nm 前面至少有 nm 个捕获子表达式那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获则 n 是反向引用后面跟有字符 m。如果两种前面的情况都不存在则 \nm 匹配八进制值 nm其中 n 和 m 是八进制数字 (0-7)。 \nml 当 n 是八进制数 (0-3)m 和 l 是八进制数 (0-7) 时匹配八进制转义码 nml。 \un 匹配 n其中 n 是以四位十六进制数表示的 Unicode 字符。例如\u00A9 匹配版权符号 (©)。 正则表达式例子整数或者小数^[0-9]\.{0,1}[0-9]{0,2}$ 只能输入数字^[0-9]*$。 只能输入n位的数字^\d{n}$。 只能输入至少n位的数字^\d{n,}$。 只能输入m~n位的数字。^\d{m,n}$ 只能输入零和非零开头的数字^(0|[1-9][0-9]*)$。 只能输入有两位小数的正实数^[0-9](.[0-9]{2})?$。 只能输入有1~3位小数的正实数^[0-9](.[0-9]{1,3})?$。 只能输入非零的正整数^\?[1-9][0-9]*$。 只能输入非零的负整数^\-[1-9][]0-9*$。 只能输入长度为3的字符^.{3}$。 只能输入由26个英文字母组成的字符串^[A-Za-z]$。 只能输入由26个大写英文字母组成的字符串^[A-Z]$。 只能输入由26个小写英文字母组成的字符串^[a-z]$。 只能输入由数字和26个英文字母组成的字符串^[A-Za-z0-9]$。 只能输入由数字、26个英文字母或者下划线组成的字符串^\w$。 验证用户密码^[a-zA-Z]\w{5,17}$正确格式为以字母开头长度在6~18之间只能包含字符、数字和下划线。 验证是否含有^%,;?$\等字符[^%,;?$\x22]。 只能输入汉字^[\u4e00-\u9fa5]{0,}$ 验证Email地址^\w([-.]\w)*\w([-.]\w)*\.\w([-.]\w)*$。 验证InternetURL^http://([\w-]\.)[\w-](/[\w-./?%]*)?$。 验证电话号码^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$正确格式为XXX-XXXXXXX、XXXX-XXXXXXXX、XXX-XXXXXXX、XXX-XXXXXXXX、XXXXXXX和XXXXXXXX。 验证身份证号15位或18位数字^\d{15}|\d{18}$。 验证一年的12个月^(0?[1-9]|1[0-2])$正确格式为0109和112。 验证一个月的31天^((0?[1-9])|((1|2)[0-9])|30|31)$正确格式为0109和131。 匹配中文字符的正则表达式 [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内)[^\x00-\xff] 应用计算字符串的长度一个双字节字符长度计2ASCII字符计1 String.prototype.lenfunction(){return this.replace(/[^\x00-\xff]/g,aa).length;} 匹配空行的正则表达式\n[\s| ]*\r 匹配html标签的正则表达式(.*)(.*)\/(.*)|(.*)\/ 匹配首尾空格的正则表达式(^\s*)|(\s*$) 正则表达式入门字符匹配语法 字符语法 语法解释 语法例子 \d 匹配数字0~9 ‘\d’匹配8,不匹配12 \D 匹配非数字 ‘\D’匹配c,不匹配3 \w 匹配任意单字符 ‘\w\w’ 匹配A3,不匹配3 \W 匹配非单字符 ‘\W’匹配,不匹配c \s 匹配空白字符 ‘\d\s\d’匹配3 d,不匹配abc \S 匹配非空字符 ‘\S\S\S’匹配A#4,不匹配3 d . 匹配任意字符 ‘....’匹配A$ 5,不匹配换行 […] 匹配括号中任意字符 [b-d]匹配b、c、d, 不匹配e [^…] 匹配非括号字符 [^b-z]匹配a,不匹配b-z的字符 重复匹配语法 重复语法 语法解释 语法例子 {n} 匹配n次字符 \d{3}匹配\d\d\d,不匹配\d\d或\d\d\d\d {n,} 匹配n次和n次以上 \w{2}匹配\w\w和\w\w\w以上,不匹配\w {n,m} 匹配n次上m次下 \s{1,3}匹配\s,\s\s,\s\s\s,不匹配\s\s\s\s ? 匹配0或1次 5?匹配5或0不匹配非5和0 匹配一次或多次 \S匹配一个以上\S不匹配非一个以上\S * 匹配0次以上 \W*匹配0以上\W不匹配非N*\W 字符定位语法 重复语法 语法解释 语法例子 ^ 定位后面模式开始位置 $ 前面模式位于字符串末端 \A 前面模式开始位置 \z 前面模式结束位置 \Z 前面模式结束位置(换行前) \b 匹配一个单词边界 \B 匹配一个非单词边界 转义匹配语法 转义语法 涉及字符(语法解释) 语法例子 “\”实际字符 \ . * ? | ( ) { }^ $ 例如\\匹配字符“\” \n 匹配换行 \r 匹配回车 \t 匹配水平制表符 \v 匹配垂直制表符 \f 匹配换页 \nnn 匹配一个8进制ASCII \xnn 匹配一个16进制ASCII \unnnn 匹配4个16进制的Uniode \c大写字母 匹配Ctrl-大写字母 例如\cS-匹配CtrlS 测试正则表达式如果你不觉得正则表达式很难读写的话要么你是一个天才要么你不是地球人。正则表达式的语法很令人头疼即使对经常使用它的人来说也是如此。由于难于读写容易出错所以找一种工具对正则表达式进行测试是很有必要的。 不同的环境下正则表达式的一些细节是不相同的本教程介绍的是微软 .Net Framework 2.0下正则表达式的行为所以我向你介绍一个.Net下的工具Regex Tester。首先你确保已经安装了.Net Framework 2.0然后下载Regex Tester。这是个绿色软件下载完后打开压缩包,直接运行RegexTester.exe就可以了。 下面是Regex Tester运行时的截图 其它可用的测试工具: RegexBuddy Javascript正则表达式在线测试工具