域名已变更 请手动修改文章中域名指向carlzeng.com

正则表达式 字符

1 常用的正则表达式元字符

. 匹配任意字符 * 修饰匹配符为0次任意次
^ 匹配输入行的开始位置 $ 匹配输入行的结束位置
+ 修饰匹配符至少1次 ? 修饰匹配符0次或1次
[] 用来自定义匹配“多种字符”表达式 {} 修饰匹配次数的符号
"s 空格 "S 非“空格”字符
"d 匹配任何一个0-9数字 "D 匹配一个非0-9数字
"w 匹配一个 数字、字母或下划线 "W 匹配一个非 数字、字母和下划线
*? 非贪婪修饰匹配符为0次任意次 +? 非贪婪修饰匹配符至少一次
?? 非贪婪修饰匹配符0次或1次 () 把一个表达式做为一个匹配整体
两边的表达式为“或”的关系

2 转义字符

在正则表达式中对一些特殊符号和特殊含义的字符的使用需要用“"”进行转义操作,需要转义的字符除了包括以上列出的“元字符”外,还有以下这些具有具体含义的字符:
"t 横向制表符 "n 换行符
"r 回车符 "" 转义字符本身

3 修饰符

用在正则表达式结尾。例如 /asdf/i,“i”即为“修饰符”,意思是不区分大小写的匹配“asdf”。所有修饰符的含义如下表:
g 全局匹配 i 忽略大小写
m 多行匹配 s 把整个匹配串当作一行处理
x 允许注释和空格的出现 U 非贪婪匹配

-----------------------------------------------

 

4.3 匹配多次

关于“匹配次数”的语法的使用有两种,一种是使用"{"};一种是{},但是无论如何含义都是一样的:
  • RE{N}:是精确的匹配RE N次
  • RE{N,}:会匹配RE N次或多于N次
  • RE{N,M}:会匹配RE在N次和M次之间
  • RE{,M}:匹配RE小于或等于M次

很多人对正则表达式不大了解,的确,一堆符号看起来乱七八糟,但正则表达式在我们的程序中或工作中无处不在,我更喜欢将正则表达式称做字符串匹配表达式。一大堆名词术语我不多讲,下面就一些实例来分析正则表达式:

1、电话号码匹配

中国的电话号码都是区号+号码组成,0开头,区号2到3位数,号码是7到8位数字。于是我们可以简单写成: 0"d{2,3}匹配区号,d{7,8}匹配号码。电话组合也分几种情况,区号-号码,区号空格号码,(区号)号码。要想完全匹配,我们可以写成: "(?0"d{2,3}[) -]?"d{7,8}
解释如下:"代表转义字符,因为要匹配(,于是需要将其转义,即"(匹配(。接着?代表(出现的次数是0次或1次。然后是区号,接着是)空格或者-出现1次或0次,然后接下来是7位号码或8位号码。
看到这里,可能大家肯定会发现这个表达式的不足,例如(01066666666、010)66666666也可以完全匹配,所以我们可以写成0"d{2,3}[ -]?"d{7,8}|"(0"d{2,3}[)]"d{7,8}
注意:这里|符号是或的意思。

2、数组字符传递匹配

假如一段字符串是:windows3ox4,50linux80,90,100 我们要做的工作是匹配数字3和4,5和80,90,100。那么如何书写正则表达式呢? 首先匹配数字,显然可以写成"d+,我们可以分析其他的几个是数字之间有,号,那么可以拆分一下:即开头由数字开始,接着是如数个“,数字”重复而成。所 以我们初略写成"d+[,"d+]+,即匹配无数个数字之间夹杂着,号,+代表重复1次或更多次,*代表重复0次或更多次,所以这里也可以写成"d+[, "d+]*,那么要想完全匹配,这里我们就只能加上“或”符号了。于是最终的可以写成"d+[,"d+]+|"d+

3、13"d{9}匹配13后面跟9个数字(中国的手机号)

4、<("w+)> 查找尖括号括起来的字母或数字(即HTML/XML标签)

表1.常用的元字符
代码 说明
. 匹配除换行符以外的任意字符
"w 匹配字母或数字或下划线或汉字
"s 匹配任意的空白符
"d 匹配数字
"b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

 

表2.常用的限定符
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

 

表3.常用的反义代码
代码/语法 说明
"W 匹配任意不是字母,数字,下划线,汉字的字符
"S 匹配任意不是空白符的字符
"D 匹配任意非数字的字符
"B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

 

 

posted @ 2008-10-07 18:04  CarlZeng  阅读(224)  评论(0编辑  收藏  举报
域名已变更 请手动修改文章中域名指向carlzeng.com