今天在网上闲逛,偶然间找到一个很不错的关于正则表达式的教程~~《正则表达式30分钟入门教程》
http://deerchao.net/tutorials/regex/regex.htm
顺便介绍一个很好用的正则表达式辅助工具:
点此查看详情
以下是我的正则表达式笔记:
正则表达式
b 代表单词开头或结尾 例如:bhib 仅仅匹配hi 不匹配 him shi
b不代表任何字符,仅仅表示一个位置。
^匹配字符串的开头(在多行模式下为匹配一行之开头)
$匹配字符串的结尾(在多行模式下为匹配一行之结尾)
如果需要更精确的说法,b匹配这样的位置:它的前一个字符和后一个字符不全是(一个是,一个不是 或不存在) —不明白
.代表除换行符外的任意字符
*不代表字符,不代表位置,仅代表数量,任意数量
.*任意数量的不包含换行符的字符(包含0次)
+重复一次或更多次(不包含1次)
?重复0次或1次
d代表数字,例如0dd-dddddddd 代表开头一个零,后跟两位数字,之后一个横杠,再后面是八位数字。
上面的例子还可以缩写成0d{2}-d{8} 大括号中的数字代表重复次数。
{5}重复5次
{5,12}代表重复不少于5次,不多于12次。例如^d{5,12}$
{5,}代表重复不少于5次
s匹配任意空白字符,如空格,制表符,换行符,全角空格。
w匹配字母,数字,下划线或汉字等。
[ ]自定义某一范围,例如[aeiou]匹配任何一个英文原音字母,[0-9]匹配一位数字,[a-z0-9A-Z]匹配一个数字或一个字母(仅考虑英文的话等同于w)。
-这个符号(减号)如果放在[]里面指定范围,一定要放在开头,不然会出错。
一个例子 (?0d{2}[) -]?d{8} 解析:首先是一个转义字符(,它能出现0次或1次(?), 然后是一个0,后面跟着2个数字(d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(d{8}) 他可以匹配这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。当然也可以匹配010)12345678或(022-87654321这样的“不正确”的格式。
字符转义,如果要查找元字符本身,需要加转义字符,如. *
| 分支条件,可以理解为“或”的关系,但要注意条件顺序,按照从左到右的顺序逐个匹配,如匹配则忽略掉后面的条件,如:d{5}|d{5}-?d{4}则只会匹配前5位。
()分组,之前只能重复单个字符,使用分组后,可以重复自定义的一段字符串,例如:
((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)
(这个验证IP的正则很巧妙~~改一点都会出错,比如我曾尝试将最后的dd合并~~就出错了)