一、字符组[...]
字符组可以匹配[ ]中包含的任意一个字符。虽然可以是任意一个,但只能是一个。
1、普通字符组:[abcdefg] 表示abcdefg中的任意一个字符
2、用连字符[..-..]来表示一个范围:[a-z]表示所有小写字母,[A-Z]所有大写字母,[0-9]表示所有数字,[a-zA-Z0-9_]表示大小写字母或数字或下划线中的任意一个。当用-表示范围时,要求前面字符的码位(ASCII码位)小于后面的字符的码位。
3、[^…] 排除型字符组。排除型字符组表示任意一个未列出的字符,同样只能是一个。排除型字符组同样支持由连字符“-”来表示一个范围。
表达式 | 说明 |
[abc] | 表示“a”或“b”或“c” |
[0-9] | 表示0~9中任意一个数字,等价于[0123456789] |
[\u4e00-\u9fa5] | 表示任意一个汉字 |
[^a1<] | 表示除“a”、“1”、“<”外的其它任意一个字符 |
[^a-z] | 表示除小写字母外的任意一个字符 |
举例:
“[0-9][0-9]”在匹配“Windows 2003”时,匹配成功,匹配的结果为“20”。
“[^inW]”在匹配“Windows 2003”时,匹配成功,匹配的结果为“d”。
二、常用字符范围缩写
对于一些常用的字符范围,如数字等,由于非常常用,即使使用[0-9]这样的字符组仍显得麻烦,所以定义了一些元字符,来表示常见的字符范围。
对于一些常用的字符范围,如数字等,由于非常常用,即使使用[0-9]这样的字符组仍显得麻烦,所以定义了一些元字符,来表示常见的字符范围。
表达式 | 说明 |
\d | 任意一个数字,相当于[0-9],即0~9 中的任意一个 |
\w | 任意一个字母或数字或下划线,相当于[a-zA-Z0-9_] |
\s | 任意空白字符,相当于[ \r\n\f\t\v] |
\D | 任意一个非数字字符,\d取反,相当于[^0-9] |
\W | \w取反,相当于[^a-zA-Z0-9_] |
\S | 任意非空白字符,\s取反,相当于[^ \r\n\f\t\v] |
在支持ASCII但不支持Unicode的语言中,\w的范围是数字、字母、下划线,如javascript
1 <script type="text/javascript"> 2 var str = '123_abc中国汉字efg'; 3 var pattern = /\w+/g; 4 var arr = str.match(pattern); 5 typeof(arr); 6 if(arr != null){ 7 for(i=0;i<arr.length;i++) 8 { 9 document.write(arr[i]+'<br/>'); 10 } 11 } 12 </script> 13 //输出: 14 123_abc 15 efg
注:在支持Unicode的语言中,如.NET,默认情况下,“\w”除可以匹配[a-zA-Z0-9_]外,还可以匹配一些Unicode字符集,如汉字,全角数字等等。
虽然PHP支持unicode,但在PHP中,\w只表示数字、字母、下划线,不能表示汉字
1 $pattern = '#\w+#'; 2 if(preg_match($pattern, 'abc_123端口网', $match)) 3 { 4 var_dump($match); 5 } 6 //运行结果:abc_123(不能匹配中文)
三、小数点.
小数点可以匹配除“\n”以外的任意一个字符。如果要匹配包括“\n”在内的所有字符,一般用[\s\S],或者是用“.”加(?s)匹配模式来实现。
表达式 | 说明 |
. | 匹配除了换行符 \n 以外的任意一个字符 |
小数点可以匹配除了换行符“\n”以外的任意一个字符
各编程语言对于小数点匹配的不同:
(1)PHP、Java、.Net都是匹配除换行符以外的任意字符
(2)JavaScript:由于各浏览器的解析引擎不同,“.”的匹配范围也有所不同,对于Trident内核的浏览器,如IE来说,“.”同样是匹配除了换行符“\n”以外的任意一个字符,但是对于其它内核的浏览器,如Firefox、Opera、Chrome来说,“.”是匹配除了回车符“\r”和换行符“\n”以外的任意一个字符。
1 <script type="text/javascript"> 2 document.write(/./.test("\r")); 3 document.write(/./.test("\n")); 4 </script> 5 <!--IE内核的浏览器下输出--> true false 6 <!--非IE内核的浏览器(我使用的是firefox和chrome)下输出-->false false