正则表达式:
正则表达式最早是由数学家Stephen Kleene在对自然语言的递增研究成果的基础上,于1956提出来的。具有完整语法的正则表达式,主要使用在字符串的格式的匹配方面上,后来也逐渐应用到信息技术领域。不同的编程语言对于正则表达式有细微的不同,ActionScript 3.0是按照ECMAScript第3版语言规范(ECMA-262)中的定义实现正则表达式。
熟悉windows操作系统读者,应该知道windows中是怎样查找文件的。不错,使用通配符“*”用来匹配任意字符,“?”用来匹配一个字符,来实现搜索功能的。
字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等。字符串是0个或更多个字符的序列。文本也就是文字,字符串。说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件。
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
在ActionScript 3.0中引入了强大的字符串处理工具――正则表达式。正则表达式主要用于验证文本字段的值是否符合特定模式,比如验证用户输入的电话号码位数是否正确;或者替换与特定模式匹配的部分文本值。 正则表达式的构成:正则表达式一般由两个部分组成。一部分是在双斜杠内部的字符串,称为匹配模式,用来表示要匹配的字符串的特征;另一部分是在第二个斜杠的后面,是一个字母,叫做正则表达式的标志位,由五个字母组合而成,匹配模式由两部分组成,分别为:普通字符(例如字符a到z)和特殊字符(称为元字符)。正则表达式描述在查找字符串时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
正则表达式的定义方法有两种,一种是上例中的方法,使用双斜杠来定义,语法格式如下所示:
var re1:RegExp=/\d{3}/g;
var re2:RegExp=new RegExp("\d{3}","g"); 正则表达式的语法:ActionScript 3.0中的正则表达式是按照ECMAScript第3版语言规范(ECMA-262)中语言规范的定义的。在实际应用过程中,正则表达式都比较复杂。不过复杂的正则表达式都是按照一定的语法规则组合而成。
1)正则表达式中的普通字符
正则表达式中的普通字符,包括大小写英文字母,从0到9的数字和除了元字符的其它字符,比如#、!等。注意,中文也属于普通字符,不过它在正则表达式中使用Unicode码表示。由普通字符组成的正则表达式是简单的正则表达式。
下面是几个使用普通字符的正则表达式,代码如下所示:
//使用英文字母作为正则表达式匹配模式
var pattern1:RegExp = /hello/;
//使用中文字符作为正则表达式匹配模式
var pattern2:RegExp = /正则/;
//使用中英文混合字符作为正则表达式匹配模式
var pattern3:RegExp = /正则hello/;
//使用符号和英文字母作为正则表达式匹配模式
var pattern4:RegExp = /#hello~/; 2)正则表达式中的元字符
正则表达式中定义了一些具有特殊含义的字符,这些字符在正则表达式中有特殊的含义,称为元字符。ActionScript 3.0中的元字符如表17-1所示:
1.匹配字符串头部字符
2.匹配字符串尾部字符
3.反斜杠转义字符
4.匹配单个字符
5.数量表示符
6.逻辑“或”操作符 3)正则表达式中的元序列
元序列是指在ActionScript 3.0中具有特殊含义的字符序列。ActionScript 3.0中的元序列如表所示:
元序列 说 明
{n}{n,}和{n,n} 指定前一项目的数值数量或数量范围,属于数量标识符。
\b 匹配单词字符和非单词字符之间的位置。
\B 匹配两个单词字符之间的位置,也匹配两个非单词字符之间的位置。
\d 匹配十进制数字。
\D 匹配除数字以外的任何字符。
\f 匹配换页符。
\n 匹配换行符。
\r 匹配回车符。
\s 匹配任何空白字符(空格、制表符、换行符或回车符)。
\S 匹配除空白字符以外的任何字符。
\t 匹配制表符。
\unnnn 匹配字符代码由十六进制数字 nnnn 指定的 Unicode 字符。
\v 匹配垂直换页符。
\w 匹配单词字符(A-Z、a-z、0-9 或 _)。请注意,\w 不匹配非英文字符,如 é、Ò 或 Á。
\W 匹配除单词字符以外的任何字符。
\xnn 匹配具有指定 ASCII 值(由十六进制数字 nn定义)的字符。 4)正则表达式中的字符类
字符类是指定义的一组字符以匹配正则表达式中的一个位置。此类使用元字符方括号[]来定义。例如,下面的正则表达式定义了匹配mat、mbt、mct、mdt或met的字符类:
/m[abcde]t/
字符类实现了字符类中只有一个字符符合特征要求,那么就能够实现字符串的匹配。下面示例实现字符类的匹配操作,代码如下所示:
//定义要检测的字符正则表达式
//检查字符串中是否存在正×则
var pattern1:RegExp = /正[123]则/g;
//要检测的字符串
var str1:String="正1则表达式/是一段检测代码,可以是正2则"
//使用String类的match()方法验证
trace(str1.match(pattern1))//输出:正1则,正2则
trace(str1.match(pattern1).length)//输出:2,说明有2个匹配 5)正则表达式中的标志位
标志指指定有关应如何使用正则表达式模式的一些选项,如是否区分大写和小写字符等。这些标志对应与正则表达式类的属性。在ActionScript3.0中有5个标志位,如表所示:
标志 属性 说 明
g global 匹配多个匹配。
i ignoreCase 不区分大小写的匹配。应用于 A-Z 和 a-z 字符,但不能应用于扩展字符,如 É 和 é。
m multiline 设置此标志后,$ 和 ^ 可以分别匹配行的开头和结尾。
s dotall 设置此标志后,.(点)可以匹配换行符 (\n)。
x extended 允许扩展的正则表达式。 正则表达式的用法:
在ActionScript3.0中,要搜索和检测正则表达式,既可以利用RegExp类的方法来实现,也可以利用String类的方法类来实现。
1)RegExp类
RegExp类是ActionScript 3.0中的顶级类,它允许使用正则表达式在字符串中执行搜索和替换文本的模式。其有7个属性,如表所示: 正则表达式类属性 属性 返回类型 说明
dotall Boolean 指定正则表达式模式中的点字符(.)是否与换行符相匹配。
extended Boolean 指定是否为正则表达式使用扩展模式。
global Boolean 指定是否为正则表达式使用全局匹配。
ignoreCase Boolean 指定正则表达式是否忽略大小写。
lastIndex Number 指定字符串中开始进行下一次搜索的索引位置。
multiline Boolean 指定是否设置了 m(多行)标志。
source String 指定正则表达式的模式部分。 2)String类的方法应用
String类与正则表达式的结合,能够实现更为丰富的匹配和搜索效果。在ActionScript 3.0中,String类的search()方法、match()方法和replace()方法常用于正则表达式操作。本节将介绍这三种方法与正则表达式的综合应用。
search()方法主要用于查找作业,返回搜到的字符串的位置索引;match()方法实现的是匹配作业,返回的是匹配的字符串;replace()方法实现替换作业,返回的是替换的结果。 AS3中的正则表达式是RegExp顶级类的实例。这意味着使用RegExp对象时不需要import任何类。 ☆理解正则表达式标记
默认情况下,所有标记都为关闭状态。
  g:全局标记,允许表达式在源文本中重复使用,直到没有其他匹配为止。如果未设定该标记,则表达式将返回第一个匹配。
  i:忽略大小写标记,默认情况下,所有字母数字比较都是大小写敏感的。
  m:多行标记,修改^和$锚点在表达式中的行为。关闭时,它们匹配整个文本的首末字符,开启后,它们匹配每行的首末字符。
  s:dotall标记,未设定时点匹配换行符之外的所有字符,设定后点匹配包括换行符在内的任何可能的字符。singleline
  x:扩展标记,设定后将忽略表达式中的空白符,除非经过转义
  全局标记适用于match()、replace()、test()、exec()方法。在String.match()中,它将决定返回第一个匹配和捕获分组的数组(未设定),还是返回所有匹配的数组(设定);在String.replace()中,该标记将指定替换第一个匹配(未设定)还是替换所有匹配(设定)。在RegExp.test()和RegExp.exec()中,如果设定了全局标记,则表达式将继续匹配源文本中的第n个字符,其中n是表达式的lastIndex属性。该属性在每次匹配之后设定,因此如果设定了全局标记,则可以使用RegExp.test()或RegExp.exec()通过循环渐进式遍历所有的匹配。如果未设定全局标记,这些方法将返回从第一个字符开始的第一处匹配。
☆应用正则表达式
·测试
RegExp.test(str:String):Boolean
·定位
String.search(pattern:*):int //没有匹配则返回-1
RegExp.exec(str:String):Object //没有匹配则返回null,这是一个有状态的函数,可以记住上次匹配的位置
var s:String="H12_34_BCD";
var r:RegExp=/\d{2}/ig;
var obj:Object=r.exec(s);
if(obj!=null){
trace(obj);//
trace(obj.index);//
}
obj=r.exec(s);
if(obj!=null){
trace(obj);//
trace(obj.index);//
}
·识别
RegExp.exec(str:String):Object var s:String="H12_34_BCD";
var r:RegExp=/\d{2}/ig;
var obj:Object;
while(obj=r.exec(s)){
for(var o:String in obj){
trace(o,obj[o]);
}
}
/*
输出结果
0 12
index 1
input H12_34_BCD
0 34
index 4
input H12_34_BCD
exec()返回的对象包含带有下标的属性和命名属性,并且第一个下标含有与模式匹配的文本
*/
String.match(pattern:*):Array
返回与传递给它的模式相匹配的字符串,没有匹配返回null。
var s:String="H12_34_BCD";
var r:RegExp=/\d{2}/ig;
var obj:Array=s.match(r);
trace(obj.length);//
·提取
String.match(pattern:*):Array var s:String="H12_34_BCD";
var r1:RegExp=/_(\d{2})/g;
var r2:RegExp=/_(\d{2})/;
trace(s.match(r1).length);//
trace(s.match(r2).length);//
trace(s.match(r2)[0]);//_34
trace(s.match(r2)[1]);//
传递给match()方法的表达式拥有全局标记集时,将在数组中返回与模式匹配的所有字串。其中包含所有捕获的内容。
传递给match()方法的表达式没有任何全局标记集时,它将在数组中返回第一个匹配的子串和该匹配表达式中的捕获分组。
RegExp.exec(str:String):Object var s:String="H12_34_BCD";
var r:RegExp=/((\d)(\d))/ig;
var obj:Object;
while (obj=r.exec(s)) {
for (var o:String in obj) {
trace(o,obj[o]);
}
}
/*
输出结果
0 12
1 12
2 1
3 2
index 1
input H12_34_BCD
0 34
1 34
2 3
3 4
index 4
input H12_34_BCD
从结果可以看到exec()方法更方便些
*/
·替换
String.replace(pattern:*,repl:Object):String
如果表达式中含有捕获分组,那么在替换文本时可以在替换字符串内部使用捕获文本。通过在替换字符串中使用命名为$1、$2……$99的变量,可以在替换文本中使用第1、第2和第99个捕获分组。
要为替换文本添加几分色彩,可以向replace()方法传递一个替换函数,而不是替换字符串。函数将接收匹配文本、该匹配的所有捕获分组和上下文中的完整字符串,并且可以实现任何所需的替换操作。
var s:String="H12_34_BCD";
var r:RegExp=/\d(\d)/ig;
var refun:Function=function refun(...args):String{
var rtn:String;
for(var i:int=0;i<args.length;i++){
rtn=args[i];
trace("------",rtn);
}
return rtn;
}
trace(s.replace(r,refun));
/*
输出结果
------ 12
------ 2
------ 1
------ H12_34_BCD
------ 34
------ 4
------ 4
------ H12_34_BCD
HH12_34_BCD_H12_34_BCD_BCD
*/
·拆分
String.split(delimiter:*,limit:Number=0x7fffffff):Array ☆构建表达式
如果设定了dotall标记,那么.将匹配任何字符,包括换行符。
var con:String=
"Call us at one of these numbers.\n"+
"Los Angeles:310-555-2910\n"+
"New York:212-555-2499\n"+
"Boston: 617-555-7141";
var re:RegExp=/^([\w\s]+):\s*(\d{3}-\d{3}-\d{4})/gm;
//var matches:Array=con.match(re);
//for(var i:int=0;i<matches.length;i++){
// trace(matches[i]);
//}
var obj:Object;
while(obj=re.exec(con)){
trace(obj[2]);
}
☆构建高级表达式
var s:String=
"<a href=\"http://www.baidu.com\"><span class=\"seoa\">BaiDu</span></a>\n"+
"<a href=\"http://www.google.cn\">Google</a>\n"+
"<li>Ha~~~</li>\n";
var r:RegExp=/<(\w+)[^>]*> .*? <\/\1>/ixg;
var o:Object;
while(o=r.exec(s)){
trace(o[0]);
}

[ActionScript 3.0] 正则表达式的更多相关文章

  1. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

  2. [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    本文转自:http://www.cnblogs.com/artwl/p/3396330.html 近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0, ...

  3. 【转】学习Flex ActionScript 3.0 强烈推荐电子书

    学习Flex ActionScript 3.0 强烈推荐电子书 AdvancED ActionScript 3.0 Animation(<Make things  move>姐妹篇,强烈推 ...

  4. ActionScript 3.0 for the Lunder Algorithm

    package com.feiruo.Calendar.LunderCalendar { /* *@ClassName: package:com.feiruo.Calendar.LunderCalen ...

  5. [ActionScript 3.0] AS3.0 动态加载显示内容

    可以将下列任何外部显示资源加载到 ActionScript 3.0 应用程序中: 在 ActionScript 3.0 中创作的 SWF 文件 — 此文件可以是 Sprite.MovieClip 或扩 ...

  6. ActionScript 3.0 API 中的 Video 类

    注:这个类在Flash流媒体开发中使用的很频繁,在此记录一下它的使用方法. 包 flash.media 类 public class Video 继承 Video  DisplayObject  Ev ...

  7. [ActionScript 3.0] as3处理xml的功能和遍历节点

    as3比as2处理xml的功能增强了N倍,获取或遍历节点非常之方便,类似于json对像的处理方式. XML 的一个强大功能是它能够通过文本字符的线性字符串提供复杂的嵌套数据.将数据加载到 XML 对象 ...

  8. 在 Flash ActionScript 2.0 中调用 Javascript 方法

    本篇文章由:http://xinpure.com/call-the-javascript-method-in-flash-actionscript-2-0/ 在 Flash ActionScript ...

  9. [ActionScript 3.0] 常用的正则表达式

    as 3.0常用的正则表达式: /* * 去除字符串前面的空格和跳格符 */ var src:String=" Hello! "; trace(src); //原文本 trace( ...

随机推荐

  1. What is _MainTex_ST ?

    [What is _MainTex_ST ?] 在Unity自带的Unlit/Texture中,有引用到float4 _MainTex_ST,如下: // Unlit shader. Simplest ...

  2. Python 爬虫之 Scrapy 分布式原理以及部署

    Scrapy分布式原理 关于Scrapy工作流程 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键就是共享 ...

  3. 124. Binary Tree Maximum Path Sum (Tree; DFS)

    Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence ...

  4. Listview getItemViewType的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

  5. 10-stack

    c++ stl栈stack介绍 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件 ...

  6. code1154 能量项链

    d[l][i]表示:从第i个珠子开始,连续l个珠子合并后释放的最大能量 状态转移方程d[l][i] = d[j][i] + d[l-j][i+j] + w[i]*w[i+j]*w[i+l],j从1到l ...

  7. linux的“自动化”-乾颐堂CCIE

    linux系统的web网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应.日志分割.数据整理,在特定状态执行特定任务等等,这些都会需要linux能实现自动执行某些任任务.本篇博文介 ...

  8. 1.单机部署hadoop测试环境

    之前看了很多理论上的知识,感觉云里雾里的,所以赶紧着手搭建个单机版的hadoop跑一跑,开启自学大数据技术的第一步~~ 1.在开源的世界里,我就是个土豪,要啥有啥,所以首先你得有个jdk,有钱所以用最 ...

  9. 实践作业4:Web测试实践(小组作业)每日任务记录5

    (一)今日任务更新 本次小组作业均已完成! 本组文件最终pdf文件(文件稍大,请耐心等待加载):https://files.cnblogs.com/files/ruanshuo170204/Web测试 ...

  10. CodeForces 289A Polo the Penguin and Segments (水题)

    题意:给你 n 段区间,而且还是不相交的,然后你只能向左扩展左端点,或者向右扩展右端点,然后扩展最少的步数让整数总数能够整除 k. 析:很简单么,只要在记录算一下数量,然后再算出 k 的倍数差多少就行 ...