随笔-1  评论-0  文章-2  trackbacks-0
匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空白行的正则表达式:\n\s*\r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力 匹配首尾空白字符的正则表达式:^\s*|\s*$ 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 评注:表单验证时很实用 匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 评注:匹配形式如 0511-4405222 或 021-87888822 匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始 匹配中国邮政编码:[1-9]\d{5}(?!\d) 评注:中国邮政编码为6位数字 匹配身份证:\d{15}|\d{18} 评注:中国的身份证为15位或18位 匹配ip地址:\d+\.\d+\.\d+\.\d+ 评注:提取ip地址时有用 匹配特定数字: ^[1-9]\d*$    //匹配正整数 ^-[1-9]\d*$   //匹配负整数 ^-?[1-9]\d*$   //匹配整数 ^[1-9]\d*|0$  //匹配非负整数(正整数 + 0) ^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0) ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数 ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0) ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0) 评注:处理大量数据时有用,具体应用时注意修正 匹配特定字符串: ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串 ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串 ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串 评注:最基本也是最常用的一些表达式 一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。 字符簇 含义 ^[a-zA-Z_]$ 所有的字母和下划线 ^[[:alpha:]]{3}$ 所有的3个字母的单词 ^a$ 字母a ^a{4}$ aaaa ^a{2,4}$ aa,aaa或aaaa ^a{1,3}$ a,aa或aaa ^a{2,}$ 包含多于两个a的字符串 ^a{2,} 如:aardvark和aaab,但apple不行 a{2,} 如:baad和aaa,但Nantucket不行 \t{2} 两个制表符 .{2} 所有的两个字符 ^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串 ^[0-9]{1,}$ //所有的正数 ^\-{0,1}[0-9]{1,}$ //所有的整数 ^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数 特殊字符"?"与{0,1}是相等的,它们都代表着:“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以简化为: ^\-?[0-9]{0,}\.?[0-9]{0,}$ 特殊字符"*"与{0,}是相等的,它们都代表着“0个或多个前面的内容”。最后,字符"+"与 {1,}是相等的,表示“1个或多个前面的内容”,所以上面的4个例子可以写成: ^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串 ^[0-9]+$ //所有的正数 ^\-?[0-9]+$ //所有的整数 ^\-?[0-9]*\.?[0-9]*$ //所有的小数 ^ 匹配行首 $ 匹配行尾 . 匹配任何单个字符 [] 匹配集合中的字符 [^] 匹配不在集合中的字符 ? 匹配前一个样式0或1次 * 匹配前一个样式0或更多次 + 匹配前一个样式1或更多次 | 匹配前一个或后一个样式 & 匹配前一个样式0或更多次 # 匹配前一个样式1或更多次 {} Group char to form one pattern () Group and remember \ 下一个字符直接用原意(只对a-z之外的字符有效) < 匹配词的开始 > 匹配词的结尾 \x## 匹配ASCII码为##(16进制)的字符 \N### 匹配ASCII码为##(10进制)的字符 \o### 匹配ASCII码为##(8进制)的字符 \a 匹配 \a \b 匹配 \b \f 匹配 \f \r 匹配 0x13(回车) \t 匹配 0x09(跳格) \v 匹配 \v \e 匹配 Esc(0x05) \n 匹配0x10(换行) \s 匹配空格(回车,换行,制表符,空格) \S 匹配非空格(!\s) \w 整字匹配 \W 非整字匹配 \d 匹配数字 \D 匹配非数字 \U 匹配大写字母 \L 匹配小写字母 \C 后面开始大小写敏感 \c 后面开始大小写不敏感 \# 匹配前面定义的组(#: 1-9, a-f) 下面举一些例子来说明正则表达式的使用方法: 1. 查找以空字符结尾的行: [\x20\t]+$ 2. 查找空行 ^$ 3. 查找12.34 \$12\.34 4. 查找合法的C语言变量名: \<[ a-zA-Z][ a-zA-Z0-9]* 5. 查找最里层的表达式 ([^()]*) 正则表达式中的特殊字符: 字符 意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释。 例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示 匹配一个单词的分界线。 或者: 对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释。 例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a。 为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配’a*’。 字符^ 意义:表示匹配的字符必须在最前边。 例如:/^A/不匹配"an A,"中的’A’,但匹配"An A."中最前面的’A’。 字符$ 意义:与^类似,匹配最末的字符。 例如:/t$/不匹配"eater"中的’t’,但匹配"eat"中的’t’。 字符* 意义:匹配*前面的字符0次或n次。 例如:/bo*/匹配"A ghost booooed"中的’boooo’或"A bird warbled"中的’b’,但不匹配"A goat g runted"中的任何字符。 字符+ 意义:匹配+号前面的字符1次或n次。等价于{1,}。 例如:/a+/匹配"candy"中的’a’和"caaaaaaandy."中的所有’a’。 字符? 意义:匹配?前面的字符0次或1次。 例如:/e?le?/匹配"angel"中的’el’和"angle."中的’le’。 字符. 意义:(小数点)匹配除换行符外的所有单个的字符。 例如:/.n/匹配"nay, an apple is on the tree"中的’an’和’on’,但不匹配’nay’。 字符(x) 意义:匹配’x’并记录匹配的值。 例如:/(foo)/匹配和记录"foo bar."中的’foo’。匹配子串能被结果数组中的素[1], ..., [n] 返 回,或被RegExp对象的属性$1, ..., $9返回。 字符x|y 意义:匹配’x’或者’y’。 例如:/green|red/匹配"green apple"中的’green’和"red apple."中的’red’。 字符{n} 意义:这里的n是一个正整数。匹配前面的n个字符。 例如:/a{2}/不匹配"candy,"中的’a’,但匹配"caandy," 中的所有’a’和"caaandy."中前面的两个 ’a’。 字符{n,} 意义:这里的n是一个正整数。匹配至少n个前面的字符。 例如:/a{2,}不匹配"candy"中的’a’,但匹配"caandy"中的所有’a’和"caaaaaaandy."中的所有’a’ 字符{n,m} 意义:这里的n和m都是正整数。匹配至少n个最多m个前面的字符。 例如:/a{1,3}/不匹配"cndy"中的任何字符,但匹配 "candy,"中的’a’,"caandy," 中的前面两个 ’a’和"caaaaaaandy"中前面的三个’a’,注意:即使"caaaaaaandy" 中有很多个’a’,但只匹配前面的三 个’a’即"aaa"。 字符[xyz] 意义:一字符列表,匹配列出中的任一字符。你可以通过连字符-指出一个字符范围。 例如:[abcd]跟[a-c]一样。它们匹配"brisket"中的’b’和"ache"中的’c’。 字符[^xyz] 意义:一字符补集,也就是说,它匹配除了列出的字符外的所有东西。 你可以使用连字符-指出一 字符范围。 例如:[^abc]和[^a-c]等价,它们最早匹配"brisket"中的’r’和"chop."中的’h’。 字符[b] 意义:匹配一个空格(不要与b混淆) 字符b 意义:匹配一个单词的分界线,比如一个空格(不要与[b]混淆) 例如:/bnw/匹配"noonday"中的’no’,/wyb/匹配"possibly yesterday."中的’ly’。 字符B 意义:匹配一个单词的非分界线 例如:/wBn/匹配"noonday"中的’on’,/yBw/匹配"possibly yesterday."中的’ye’。 字符cX 意义:这里的X是一个控制字符。匹配一个字符串的控制字符。 例如:/cM/匹配一个字符串中的control-M。 字符d 意义:匹配一个数字,等价于[0-9]。 例如:/d/或/[0-9]/匹配"B2 is the suite number."中的’2’。 字符D 意义:匹配任何的非数字,等价于[^0-9]。 例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的’B’。 字符f 意义:匹配一个表单符 字符n 意义:匹配一个换行符 字符r 意义:匹配一个回车符 字符s 意义:匹配一个单个white空格符,包括空格,tab,form feed,换行符,等价于[ fnrtv]。 例如:/sw*/匹配"foo bar."中的’ bar’。 字符S 意义:匹配除white空格符以外的一个单个的字符,等价于[^ fnrtv]。 例如:/S/w*匹配"foo bar."中的’foo’。 字符t 意义:匹配一个制表符 字符v 意义:匹配一个顶头制表符 字符w 意义:匹配所有的数字和字母以及下划线,等价于[A-Za-z0-9_]。 例如:/w/匹配"apple,"中的’a’,"$5.28,"中的’5’和"3D."中的’3’。 字符W 意义:匹配除数字、字母外及下划线外的其它字符,等价于[^A-Za-z0-9_]。 例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的’%’。 字符n 意义:这里的n是一个正整数。匹配一个正则表达式的最后一个子串的n的值(计数左圆括号)。 例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的’apple, orange’,下面 有一个更加完整的例子。 注意:如果左圆括号中的数字比n指定的数字还小,则n取下一行的八进制escape作为描述。 字符ooctal和xhex 意义:这里的ooctal是一个八进制的escape值,而xhex是一个十六进制的escape值,允许在一个正则表达式中嵌入ASCII码。
posted on 2007-09-07 11:30 王彬 阅读(139) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。