as3正则表达式

1.新建正则表达式,有两种方式
var exp1:RegExp = new RegExp("ABCD","g");
var exp2 = /ABCD/g;//g global 表示全局匹配

trace("ABCDEFABCD".match(exp1)); 
trace("ABCDEFABCD".match(exp2));//输出ABCD,ABCD,其中,字条串.match(表达式),返回一个匹配到的数组

2.元字符
 
1)"." 表示匹配任意单个字符(如:1,e,中,*等),可以是数字,字母,汉字,标点等特殊字符
如:
   trace("this is a good Boo*".match(/.oo./g));//返回good,Boo*
但是如果匹配的正则子串本身要包含"."的话,就要用转义,如:
   trace("this is a good Boo.".match(/.oo\./g));//返回Boo.

2)"^" 表示匹配字符串的起始处
   (1) trace("ABAFT\nABALYN\nABOUT".replace(/^AB/g,‘中国‘));//把字符串起始处的"AB"替换为"中国"     返

回: 
    中国AFT\nABALYN\nABOUT
   输入后变成:
    中国AFT
    ABALYN
    ABOUT

在多行匹配中,匹配方式指定为m时,从每个\n后开始匹配

(2) trace("ABAFT\nABALYN\nABOUT".replace(/^AB/gm,‘中国‘));//m multiline表示多行的意思,即多行匹配 
   返回:
    中国AFT\n中国ALYN\n中国OUT
   输入后变成:
    中国AFT
    中国ALYN
    中国OUT

注意:

trace("ABAFT\nABALYN\nABOUT".replace(/^AB/,‘中国‘));

trace("ABAFT\nABALYN\nABOUT".replace(/^AB/m,‘中国‘));

以上两种方式匹配的结果都与(1)结果一样,所以要匹配多行时,"g"和"m"要同时使用

3)$ 表示匹配字符串结尾处,在多行匹配字符串中,匹配方式指定为m时,从每个\n前开始匹配

4)* 表示其前面的字符或表达式出现0次或多次,即任意次,次数>=0,如果0次或多次都满足的情况,取出现多次
   如:/bo*/ 表示o可以出现0次或多次,bo,boo,boook,b,bk都匹配

5)+ 表示其前面的字符或表达式至少出现1次以上,即次数>=1,如果1次或多次满足的情况,取出现多次
   如:/bo+/ 表示o可以出现1次以上,bo,boo,boook都匹配,但b,bk不匹配

6)? 表示其前面的字符哎呀表达式可出现一次也可不出现,如果出现与可不出现两种都满足的情况,取出现一次
   如:trace("This Book is Good Boooooook BoxBx".replace(/Bo?/g,‘一‘));
   返回:This 一ok is Good 一ooooook 一x一x
  其中Book既满足Bo,又满足B,也就是说o可出现也可不出现,取第一种情况,Bo

《关于最小匹配和最大匹配(贪婪模式和非贪婪模式)》

".*"

匹配 "内容A" "内容B" "内容C"   结果只有一个匹配结果, 就是"内容A" "内容B" "内容C",

贪心模式尽可能的匹配到更长的内容,于是从第1个双引号开始直到最后一个双引号

".*?"

匹配 "内容A" "内容B" "内容C"

结果有3个匹配结果, 分别是"内容A" 和 "内容B" 和 "内容C" . 非贪心模式尽可能少的匹配

7)() 表示把正则表达式的特定串组成一个组,作为一个整体
   如:trace("AGoGo Is A Name AGo‘s Father".replace(/A(Go)*/g,‘哈‘));
              把Go作为一个整体,即Go可出现任意次
   返回:哈 Is 哈 Name 哈‘s Father

注意:组可以认为是正则表达式匹配模式的子模式,可以当做是一个普通的字符进行处理

(1)String.match()和RegExp.exec()捕捉了整个正则匹配的子串,同时捕捉了组匹配的子串
    如:

trace("this is a good boboobooobooook".replace(/(bo+)*/,‘book‘));
      bo+表示以b开头,o出现1次以上,然后再以组的形式出现任意多次
     返回:this is a good book
     /(bo+)*/ 这里相当于/(bo+)(bo+)(bo+)(bo+)/
   
    (2)组的反向引用,即把前面定义的组引用过来,如/(bo+).*\1kie/
     trace("this book is a goodbookie".replace(/(bo+).*\1kie/,‘book‘)); 
     返回:this book
     /(bo+).*\1kie/ 这里相当于/(bo+).*(bo+)kie/
   
    (3)?:指定组所匹配的子串不被捕获
     trace("this book is a good bookie".match(/b(o+)k./));
     trace("this book is a good bookie".match(/b(?:o+)k./));
     返回:
      book ,oo
      book

(4)?=向前查找,即先匹配,再把符合某个特殊条件的取出来
     如:
     trace(‘flashmx flash8 flashcs3 flash4 flash5‘.replace(/flash/g,‘[FLAHSH]‘));
     trace(‘flashmx flash8 flashcs3 flash4 flash5‘.replace(/flash(?=cs)/g,‘[FLAHSH]‘));

返回:
          [FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]4 [FLAHSH]5
          flashmx flash8 [FLAHSH]cs3 flash4 flash5

/flash(?=cs)/g是在/flash/g的基础之上加了(?=cs),
      这样符合条件的有flashcs3 flashcs4 flashcs5三项,

?!向后查找,即先匹配,再把符合某个特殊条件的取出来
     如:
      trace(‘flashmx flash8 flashcs3 flashcs4 flashcs5‘.replace(/flash/g,‘[FLAHSH]‘));
      trace(‘flashmx flash8 flashcs3 flashcs4 flashcs5‘.replace(/flash(?!cs[3-5])/g,‘[FLAHSH]‘));
     返回:
      [FLAHSH]mx [FLAHSH]8 [FLAHSH]cs3 [FLAHSH]cs4 [FLAHSH]cs5
      [FLAHSH]mx [FLAHSH]8 flashcs3 [FLAHSH]cs4 [FLAHSH]cs5

/flash(?!cs[3-5])/g是在/flash/g基础之上加了(?!cs[3-5]),
      即除了flashcs3,flashcs4,flashcs5以上的所有项

?=与?!相斥

8)[] 表示一个范围,里面的字符满足一个即可
   如:/[bk]/ b,k都满足
      /[a-zA-Z0-9] 26个小写字母,26个大写字母,10个数字其中任一个都满足

(1)
    trace("32o498dslkfjjlkjLDSJFL70".match(/[^0-9]/g));
    trace("32o498dslkfjjlkjLDSJFL7^0".match(/[^0-9]/g));
    trace("32o498dslkfjjlkjLDSJFL7^0".match(/[0-9^]/g));

返回: o,d,s,l,k,f,j,j,l,k,j,L,D,S,J,F,L
     o,d,s,l,k,f,j,j,l,k,j,L,D,S,J,F,L,^
     3,2,4,9,8,7,^,0

如果把^放在[]字符集的开始处,表示取反的意思,如[^0-9],表示非数字,相当于\D
    如果把^放在[]字符集的开始处,且被匹配的字符串含有^字符时,即表示取反的意思,又把^作为一个普

通字符来看待,这样,非数字和^都满足,如上面的第二trace()   
  
   (2)在字符集中,"." 并不是一个元字符,而是当作一个普通字符看待,相当于用"\."转义
    trace(‘sdfdsfdfl34l3re.‘.match(/[0-9.]/g));
    trace(‘sdfdsfdfl34l3re.‘.match(/[0-9\.]/g));
   
    返回:
     3,4,3,.
     3,4,3,.

(3)在字符集中,只有"-"和"\"是被认为是转义的,
      如:[0-9] 表示从0到9的任一数字
    [\n\t] 表示\n换行和\t制表位

trace(‘ldslfasdasd\nksdjlsd\t324123424‘.replace(/[\n\t]/g,‘转义‘));
    返回:ldslfasdasd转义ksdjlsd转义324123424

9)| 表示任选一,与[]功能相似
   如:/b|k/ b,k都满足
      /gook|book/ gook,book都满足
     trace("this is a good cook book".replace(/good|book/g,‘哈‘));
     返回:this is a 哈 cook 哈

注意:(1)
    trace("this is a good book".replace(/[gk]/g,‘哈‘));
    trace("this is a good book".replace(/g|k/g,‘哈‘));

返回:this is a 哈ood boo哈
         this is a 哈ood boo哈   
    以上两个表达式效果是一样的

但是:trace("this is a good cook book".replace(/good|book/g,‘哈‘));
       trace("this is a good cook book".replace(/[goodbook]/g,‘哈‘));
  
    返回:this is a 哈 cook 哈
       this is a 哈哈哈哈 c哈哈哈 哈哈哈哈
    以上两个表达式效果是不一样的,因为|把good和book作为一个整体,而[]把good和book
    合在一起,即goodbook,也就是说只要满足g,o,d,b,k其中任意一个字符就行了

10)- 表示一个范围,与[]一起用
   如:trace("lLJ62-76DS5LFd-4Jlk-中国".match(/[a-z\-]/g));
    [a-z\-]其中,a-z中的"-"是一个元字符,表示从a到z的一个范围,而\-转义后表示"-"字符

3.元序列
1){n}表示在它前面的字符或表达式必须重复n次,即次数=n
   如: /bo{2}/,其中o要重复2次,boo满足,boook不满足

2){n,}表示在它前面的字符或表达式必须重复n次以上,即次数>=n,如果既满足n,又满足n+1,取n+1,即取最大的
   如: /bo{2,}/,其中o要重复2次以上,boo满足,boook也满足

3){n,m}表示在它前面的字符或表达式必须重复n到m次以上,即n<=次数<=m,如果既满足n,又满足n+1,取n+1,即取最大的
   如: 
    trace("This Book is Good Boooooook BoxBx".replace(/Bo{2,6}/g,‘哈‘));
    返回:This 哈k is Good 哈ok BoxBx

trace("This Book is Good Boook BoxBx".replace(/Bo{2,6}/g,‘哈‘));
    返回:This 哈k is Good 哈k BoxBx

4)\d 表示匹配数字字符,即0-9
   \D 表示匹配非数字字符,与\d,即除了0-9之外的字符
   \w 表示匹配一个单词字符,即26个小写字母,26个大写字母,10个数字,和下划线
          \W 表示匹配非单词字符,与\w反义  
   \s 表示匹配任意空白字符
     \S 表示匹配任意非空间字符,与\s反义

4.标记
i ignoreCase 忽略大小写
g global   全局匹配
m multiline 多行模式
s dotall   指定元字符"."是否匹配"\n",即"\n"也作为一个普通字符处理
   如:
    trace("this is a book\nkie".replace(/bo+k.kie/g,‘哈‘));
    trace("this is a book\nkie".replace(/bo+k.kie/gs,‘哈‘));//在这里,\n被看成是一个普通字符

返回:
    this is a book
    kie
    this is a 哈

x extend   扩展模式,在扩展模式下,正则表示式的空白字符被忽略了,如/c _ d/ 的效果相当于 /c_d/

5.正则表达式的属性
source 可得到正则表达式的匹配模式,如:trace(/\d\d/.source);输出:\d\d
lastIndex 表示正则表达式在字符串中的起始匹配位置,只有当标记为g时才起作用

6.正则表达式的方法
exec(字符串) 返回一个Object
test(字符串) 返回一个Boolean值

2012/4/20 补充:

AS3正则表达式只能匹配同一行的内容,如果匹配的内容分散到多行是匹配不到的;

所以,如果必要应该先把换行符替换掉(content = content.replace(/\n/gi, "");)

然后再做其它匹配。

转自:http://hi.baidu.com/wojiubaibudu/item/20259da5991a8cdd5bf1910f

时间: 2024-10-20 06:20:01

as3正则表达式的相关文章

[2012-12-18 14:59:31]AS3 常用正则表达式的总结-不用google了,我帮收集的很多了

正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里转摘出了一些常用的正则表达式语句,大家用到的时候就不用自己写了.红色字体为常用正则:下面这个类是我自己写的一个示例,想必大家做客户端,用户登录信息肯定会用的正则表达式. package com.qiye.regexp { /** * 常用正则表达式. * @author Qiye -七夜 */ public class RegExpFunc { public function RegExpFunc() { } /**

AS3中正则表达式对反斜杠的替换

一个有趣的小问题,下面的正则表达式能替换成功么? var __str:String = \'12346789\'; trace(__str.replace(/\\/g, \'5\')); 答案是:不能.trace出来的结果为: [trace] 12346789 其实正则本身并没有写错,错在被替换的字符串.反斜杠“”在AS3中是转义符,会将其后的任何值转换为本身,因此看到的字符串其实本身就是12346789,也就是没有反斜杠,当然无法搜索到. 直接trace(__str),结果和上面的trace相

[转]Flash、Flex、AS3.0框架及类库资源收集之十全大补

原文地址:http://www.d5power.com/portal.php?mod=view&aid=27 APIs.Libs.Components1.as3ebaylibhttp://code.google.com/p/as3ebaylib/2.as3youtubelibhttp://code.google.com/p/as3youtubelib/3.as3flickrlibhttp://code.google.com/p/as3flickrlib/4.Yahoo ASTRA Flash C

[ActionScript 3.0] 正则表达式

正则表达式: 正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上,于1956提出来的.具有完整语法的正则表达式,主要使用在字符串的格式的匹配方面上,后来也逐渐应用到信息技术领域.不同的编程语言对于正则表达式有细微的不同,ActionScript 3.0是按照ECMAScript第3版语言规范(ECMA-262)中的定义实现正则表达式. 熟悉windows操作系统读者,应该知道windows中是怎样查找文件的.不错,使用通配符“*”用来匹配任意字符,“?”用来匹

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh