﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Surfing</title><link>http://www.blogjava.net/bcterry/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 01:57:23 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 01:57:23 GMT</pubDate><ttl>60</ttl><item><title>常用的正则表达式</title><link>http://www.blogjava.net/bcterry/archive/2011/03/23/346811.html</link><dc:creator>bc</dc:creator><author>bc</author><pubDate>Wed, 23 Mar 2011 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/bcterry/archive/2011/03/23/346811.html</guid><wfw:comment>http://www.blogjava.net/bcterry/comments/346811.html</wfw:comment><comments>http://www.blogjava.net/bcterry/archive/2011/03/23/346811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/bcterry/comments/commentRss/346811.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/bcterry/services/trackbacks/346811.html</trackback:ping><description><![CDATA[匹配中文字符的正则表达式： [\u4e00-\u9fa5]&nbsp; <br />
评注：匹配中文还真是个头疼的事，有了这个表达式就好办了&nbsp; <br />
&nbsp; <br />
匹配双字节字符(包括汉字在内)：[^\x00-\xff]&nbsp; <br />
评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）&nbsp; <br />
&nbsp; <br />
匹配空白行的正则表达式：\n\s*\r&nbsp; <br />
评注：可以用来删除空白行&nbsp; <br />
&nbsp; <br />
匹配HTML标记的正则表达式：&lt;(\S*?)[^&gt;]*&gt;.*?|&lt;.*? /&gt;&nbsp; <br />
评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力&nbsp; <br />
&nbsp; <br />
匹配首尾空白字符的正则表达式：^\s*|\s*$&nbsp; <br />
评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式&nbsp; <br />
&nbsp; <br />
匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*&nbsp; <br />
评注：表单验证时很实用&nbsp; <br />
&nbsp; <br />
匹配网址URL的正则表达式：[a-zA-z]+://[^\s]*&nbsp; <br />
评注：网上流传的版本功能很有限，上面这个基本可以满足需求&nbsp; <br />
&nbsp; <br />
匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$&nbsp; <br />
评注：表单验证时很实用&nbsp; <br />
&nbsp; <br />
匹配国内电话号码：\d{3}-\d{8}|\d{4}-\d{7}&nbsp; <br />
评注：匹配形式如 0511-4405222 或 021-87888822&nbsp; <br />
&nbsp; <br />
匹配腾讯QQ号：[1-9][0-9]{4,}&nbsp; <br />
评注：腾讯QQ号从10000开始&nbsp; <br />
&nbsp; <br />
匹配中国邮政编码：[1-9]\d{5}(?!\d)&nbsp; <br />
评注：中国邮政编码为6位数字&nbsp; <br />
&nbsp; <br />
匹配身份证：\d{15}|\d{18}&nbsp; <br />
评注：中国的身份证为15位或18位&nbsp; <br />
&nbsp; <br />
匹配ip地址：\d+\.\d+\.\d+\.\d+&nbsp; <br />
评注：提取ip地址时有用&nbsp; <br />
&nbsp; <br />
匹配特定数字：&nbsp; <br />
^[1-9]\d*$　 　 //匹配正整数&nbsp; <br />
^-[1-9]\d*$ 　 //匹配负整数&nbsp; <br />
^-?[1-9]\d*$　　 //匹配整数&nbsp; <br />
^[1-9]\d*|0$　 //匹配非负整数（正整数 + 0）&nbsp; <br />
^-[1-9]\d*|0$　　 //匹配非正整数（负整数 + 0）&nbsp; <br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$　　 //匹配正浮点数&nbsp; <br />
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$　 //匹配负浮点数&nbsp; <br />
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$　 //匹配浮点数&nbsp; <br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$　　 //匹配非负浮点数（正浮点数 + 0）&nbsp; <br />
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$　　//匹配非正浮点数（负浮点数 + 0）&nbsp; <br />
评注：处理大量数据时有用，具体应用时注意修正&nbsp; <br />
&nbsp; <br />
匹配特定字符串：&nbsp; <br />
^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串&nbsp; <br />
^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串&nbsp; <br />
^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串&nbsp; <br />
^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串&nbsp; <br />
^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串&nbsp; <br />
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+___FCKpd___0quot;　　　　//email地址&nbsp; <br />
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?___FCKpd___0quot;　　//url&nbsp; <br />
<br />
匹配中文字符的正则表达式： [\u4e00-\u9fa5] <br />
评注：匹配中文还真是个头疼的事，有了这个表达式就好办了 <br />
<br />
匹配双字节字符(包括汉字在内)：[^\x00-\xff] <br />
评注：可以用来计算字符串的长度（一个双字节字符长度计2，ASCII字符计1） <br />
<br />
匹配空白行的正则表达式：\n\s*\r <br />
评注：可以用来删除空白行 <br />
<br />
匹配HTML标记的正则表达式：&lt;(\S*?)[^&gt;]*&gt;.*?|&lt;.*? /&gt; <br />
评注：网上流传的版本太糟糕，上面这个也仅仅能匹配部分，对于复杂的嵌套标记依旧无能为力 <br />
<br />
匹配首尾空白字符的正则表达式：^\s*|\s*$ <br />
评注：可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式 <br />
<br />
匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* <br />
评注：表单验证时很实用 <br />
<br />
匹配网址URL的正则表达式：[a-zA-z]+://[^\s]* <br />
评注：网上流传的版本功能很有限，上面这个基本可以满足需求 <br />
<br />
匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$ <br />
评注：表单验证时很实用 <br />
<br />
匹配国内电话号码：\d{3}-\d{8}|\d{4}-\d{7} <br />
评注：匹配形式如 0511-4405222 或 021-87888822 <br />
<br />
匹配腾讯QQ号：[1-9][0-9]{4,} <br />
评注：腾讯QQ号从10000开始 <br />
<br />
匹配中国邮政编码：[1-9]\d{5}(?!\d) <br />
评注：中国邮政编码为6位数字 <br />
<br />
匹配身份证：\d{15}|\d{18} <br />
评注：中国的身份证为15位或18位 <br />
<br />
匹配ip地址：\d+\.\d+\.\d+\.\d+ <br />
评注：提取ip地址时有用 <br />
<br />
匹配特定数字： <br />
^[1-9]\d*$　 　 //匹配正整数 <br />
^-[1-9]\d*$ 　 //匹配负整数 <br />
^-?[1-9]\d*$　　 //匹配整数 <br />
^[1-9]\d*|0$　 //匹配非负整数（正整数 + 0） <br />
^-[1-9]\d*|0$　　 //匹配非正整数（负整数 + 0） <br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$　　 //匹配正浮点数 <br />
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$　 //匹配负浮点数 <br />
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$　 //匹配浮点数 <br />
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$　　 //匹配非负浮点数（正浮点数 + 0） <br />
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$　　//匹配非正浮点数（负浮点数 + 0） <br />
评注：处理大量数据时有用，具体应用时注意修正 <br />
<br />
匹配特定字符串： <br />
^[A-Za-z]+$　　//匹配由26个英文字母组成的字符串 <br />
^[A-Z]+$　　//匹配由26个英文字母的大写组成的字符串 <br />
^[a-z]+$　　//匹配由26个英文字母的小写组成的字符串 <br />
^[A-Za-z0-9]+$　　//匹配由数字和26个英文字母组成的字符串 <br />
^\w+$　　//匹配由数字、26个英文字母或者下划线组成的字符串 <br />
"^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+___FCKpd___0quot;　　　　//email地址 <br />
"^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?___FCKpd___0quot;　　//urlview plaincopy to clipboardprint? <br />
正则几个基本概念：&nbsp; <br />
<br />
正则几个基本概念：view plaincopy to clipboardprint? <br />
1.贪婪：+,*,?,{m,n}等默认是贪婪匹配，即尽可能多匹配，也叫最大匹配&nbsp; <br />
如果后面加上?，就转化为非贪婪匹配，需要高版本支持&nbsp; <br />
<br />
1.贪婪：+,*,?,{m,n}等默认是贪婪匹配，即尽可能多匹配，也叫最大匹配 <br />
如果后面加上?，就转化为非贪婪匹配，需要高版本支持view plaincopy to clipboardprint? <br />
2.获取：默认用(x|y)是获取匹配，很多时候只是测试，不一定要求得到所匹配的数据，尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y)，这样提高了效率，优化了程序。&nbsp; <br />
<br />
2.获取：默认用(x|y)是获取匹配，很多时候只是测试，不一定要求得到所匹配的数据，尤其在嵌套匹配或大数据中就要用非获取匹配(?:x|y)，这样提高了效率，优化了程序。view plaincopy to clipboardprint? <br />
3.消耗：默认是消耗匹配，一般在预查中是非消耗匹配。&nbsp; <br />
举个例子，2003-2-8要变为2003-02-08&nbsp; <br />
如果用/-(\d)-/第二次匹配将从8开始，从而只替换第一个2，错误&nbsp; <br />
如果用/-(\d)(?=-)/则第二次匹配从第二个-开始，即不消耗字符-&nbsp; <br />
<br />
3.消耗：默认是消耗匹配，一般在预查中是非消耗匹配。 <br />
举个例子，2003-2-8要变为2003-02-08 <br />
如果用/-(\d)-/第二次匹配将从8开始，从而只替换第一个2，错误 <br />
如果用/-(\d)(?=-)/则第二次匹配从第二个-开始，即不消耗字符-view plaincopy to clipboardprint? <br />
4.预查：js中分为正向预查和负向预查&nbsp; <br />
如上面的(?=pattern)是正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。还有(?!pattern)是负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。负向预查有时会用在对[^]的扩充，[^]只是一些字符，而?!可以使整个字符串。&nbsp; <br />
<br />
4.预查：js中分为正向预查和负向预查 <br />
如上面的(?=pattern)是正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。还有(?!pattern)是负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。负向预查有时会用在对[^]的扩充，[^]只是一些字符，而?!可以使整个字符串。view plaincopy to clipboardprint? <br />
5.回调：一般用在替换上，即根据不用的匹配内容返回不用的替换值，从而简化了程序，需要高版本支持&nbsp; <br />
<br />
5.回调：一般用在替换上，即根据不用的匹配内容返回不用的替换值，从而简化了程序，需要高版本支持view plaincopy to clipboardprint? <br />
6.引用：\num 对所获取的第num个匹配的引用。&nbsp; <br />
例如，'(.)\1\1' 匹配AAA型。'(.)(.)\2\1' 匹配ABBA型。&nbsp; <br />
<br />
6.引用：\num 对所获取的第num个匹配的引用。 <br />
例如，'(.)\1\1' 匹配AAA型。'(.)(.)\2\1' 匹配ABBA型。view plaincopy to clipboardprint? <br />
正则表达式保留字&nbsp; <br />
^ (carat)&nbsp; <br />
. (period)&nbsp; <br />
[ (left bracket}&nbsp; <br />
$ (dollar sign)&nbsp; <br />
( (left parenthesis)&nbsp; <br />
) (right parenthesis)&nbsp; <br />
| (pipe)&nbsp; <br />
* (asterisk)&nbsp; <br />
+ (plus symbol)&nbsp; <br />
? (question mark)&nbsp; <br />
{ (left curly bracket, or left brace)&nbsp; <br />
\ backslash&nbsp; <br />
<br />
正则表达式保留字 <br />
^ (carat) <br />
. (period) <br />
[ (left bracket} <br />
$ (dollar sign) <br />
( (left parenthesis) <br />
) (right parenthesis) <br />
| (pipe) <br />
* (asterisk) <br />
+ (plus symbol) <br />
? (question mark) <br />
{ (left curly bracket, or left brace) <br />
\ backslash view plaincopy to clipboardprint? <br />
构造 匹配于&nbsp; <br />
<br />
构造 匹配于 view plaincopy to clipboardprint? <br />
字符&nbsp; <br />
x 字符 x&nbsp; <br />
\\ 反斜线字符&nbsp; <br />
\0n 八进制值的字符0n (0 &lt;= n &lt;= 7)&nbsp; <br />
\0nn 八进制值的字符 0nn (0 &lt;= n &lt;= 7)&nbsp; <br />
\0mnn 八进制值的字符0mnn 0mnn (0 &lt;= m &lt;= 3, 0 &lt;= n &lt;= 7)&nbsp; <br />
\xhh 十六进制值的字符0xhh&nbsp; <br />
\uhhhh 十六进制值的字符0xhhhh&nbsp; <br />
\t 制表符('\u0009')&nbsp; <br />
\n 换行符 ('\u000A')&nbsp; <br />
\r 回车符 ('\u000D')&nbsp; <br />
\f 换页符 ('\u000C')&nbsp; <br />
\a 响铃符 ('\u0007')&nbsp; <br />
\e 转义符 ('\u001B')&nbsp; <br />
\cx T对应于x的控制字符 x&nbsp; <br />
<br />
字符 <br />
x 字符 x <br />
\\ 反斜线字符 <br />
\0n 八进制值的字符0n (0 &lt;= n &lt;= 7) <br />
\0nn 八进制值的字符 0nn (0 &lt;= n &lt;= 7) <br />
\0mnn 八进制值的字符0mnn 0mnn (0 &lt;= m &lt;= 3, 0 &lt;= n &lt;= 7) <br />
\xhh 十六进制值的字符0xhh <br />
\uhhhh 十六进制值的字符0xhhhh <br />
\t 制表符('\u0009') <br />
\n 换行符 ('\u000A') <br />
\r 回车符 ('\u000D') <br />
\f 换页符 ('\u000C') <br />
\a 响铃符 ('\u0007') <br />
\e 转义符 ('\u001B') <br />
\cx T对应于x的控制字符 x view plaincopy to clipboardprint? <br />
字符类&nbsp; <br />
[abc] a, b, or c (简单类)&nbsp; <br />
[^abc] 除了a、b或c之外的任意 字符（求反）&nbsp; <br />
[a-zA-Z] a到z或A到Z ，包含（范围)&nbsp; <br />
[a-z-[bc]] a到z，除了b和c ： [ad-z]（减去）&nbsp; <br />
[a-z-[m-p]] a到z，除了m到 p： [a-lq-z]&nbsp; <br />
[a-z-[^def]] d, e, 或 f&nbsp; <br />
<br />
字符类 <br />
[abc] a, b, or c (简单类) <br />
[^abc] 除了a、b或c之外的任意 字符（求反） <br />
[a-zA-Z] a到z或A到Z ，包含（范围) <br />
[a-z-[bc]] a到z，除了b和c ： [ad-z]（减去） <br />
[a-z-[m-p]] a到z，除了m到 p： [a-lq-z] <br />
[a-z-[^def]] d, e, 或 f view plaincopy to clipboardprint? <br />
预定义的字符类&nbsp; <br />
. 任意字符（也许能与行终止符匹配，也许不能）&nbsp; <br />
\d 数字: [0-9]&nbsp; <br />
\D 非数字: [^0-9]&nbsp; <br />
\s 空格符: [ \t\n\x0B\f\r]&nbsp; <br />
\S 非空格符: [^\s]&nbsp; <br />
\w 单词字符: [a-zA-Z_0-9]&nbsp; <br />
\W 非单词字符: [^\w] 
<img src ="http://www.blogjava.net/bcterry/aggbug/346811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bcterry/" target="_blank">bc</a> 2011-03-23 10:21 <a href="http://www.blogjava.net/bcterry/archive/2011/03/23/346811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>