30分钟学习正则表达式——学习笔记

来源:互联网 发布:淘宝网主页 编辑:程序博客网 时间:2024/06/07 16:11
本文是学习此篇文章的学习笔记:

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html


先上一个小例子:简单的邮箱匹配

<script>

var str = "123lk8ks@sina.com";

var patt1 = /^[0-9]+\w+@[0-9a-zA-Z]+.com$/;

document.write(str.match(patt1));

</script>

运行结果:123lk8ks@sina.com


分析:

小例子是将str的值和正则做匹配,match()方法是匹配成功返回字符串,匹配失败返回null。

来拆分正则:^[0-9]+\w+@[0-9a-zA-Z]+.com$

^:开头位置

$:结尾位置,前面跟了‘.com’,就表示以‘.com’结尾

[0-9]+:一个或多个0-9的数字,+表示前面的内容有一个或多个(不能是0个)

\w+:\w匹配字母、数字、下划线或汉字,后面带+表示一个或多个

[0-9a-zA-Z]+:一个或多个数字或字母


==================================================================================================================

笔记正式开始:


1)元字符

\b:表示单词的开头或结尾,也就是单词的分界处。

   例:要精确查找单词“hi”:\bhi\bs

\d:表示一位数字

\s:任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等

\w:匹配字母、数字、下划线或汉字

.:可以匹配除了换行符以外的任意字符

^:开头位置

$:结尾位置,前面跟了‘.com’,就表示以‘.com’结尾

 

2)重复

*:表示*前面的内容可以连续重复使用任意次(可以是0次)

   例:hi后面不远处跟着一个Lucy:\bhi\b.*\bLucy\b

?:表示?前面的内容可以出现0或1次

+:表示+前面的内容可以出现1或多次(不能是0)

{n}:表示前面的内容要出现n次

{n,m}:表示前面的内容可以出现n-m次

   例:\d{3-8}: 3到8个数字,如‘12345’可以匹配,‘12’、‘123456789’都不行。


3)转义、字符类

\:转译字符,一些特殊字符比如‘.’、‘*’、‘-’、‘\’等,可能会被解释成别的意思,这时得用\来消除特殊意义。

[.?!]:匹配标点符号‘.’‘?’‘!’

[0-9a-zA-Z]:匹配任意一个数字或字母,后面可跟重复表达式

     例:[0-9a-zA-Z]+:表示任意1个或多个数字或字母

 

4)分支条件

|:或,有几种规则,满足任意一种都当成匹配。

   从左到右,有先满足的就停止匹配。

   例:0\d{2}-\d{8}|0\d{3}-\d{7}:表示能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。

 

5)分组(可实现多个字符的重复)

():子表达式,也叫分组。(英文格式的小括号)

     后面常跟重复,来简化表达式。

     例:一个简单的IP表达式:(\d{1,3}\.){3}\d{1,3}

         正确的IP表达式:((2[0-4]\d|25[0-5]|[0,1]?\d\d?)\.){3}((2[0-4]\d|25[0-5]|[0,1]?\d\d?)\.)

 

(6)反义(几个元字符的大写,就是它的相反意思)

\W:匹配任意不是字母、数字、下划线、汉字的字符

\S:匹配任意不是空白符的字符

\D:匹配任意非数字的字符

\B:匹配不是单词开头或结束的位置

[^x]:匹配除了x以外的任意字符

[^abcde]:匹配除了abcde这几个字母以外的任意字符

    例:\S+:匹配不包含空白符的字符串

        <a[^>]+>:匹配用尖括号括起来的以a开头的字符串


 时间原因,笔记只记录到这里,日后有时间再继续学习补齐笔记。