第20章使用正则表达式匹配字符串数据在应用程序中经常需要查找符合某种复杂规则的字符串。例如,电话号码字符串“0577-23234312”前四位为区号,后八位为电话号,中间以“-”相连。事实上,不同地区的电话号长度也不尽相同。使用正则表达式可高效地匹配查找字符串数据。20.1正则表达式概述正则表达式是用于描述复杂规则的工具。在许多应用程序中用户其实已经接触到了正则表达式使用正则表达式的难点在于如何定义正确的正则表达式。不正确的正则表达式不能准确地描述字符串规则。正则表达式错误有两种表现形式:规则完全不合逻辑、规则不能满足全部要求。前者可能是开发者逻辑上的错误引起的。正则表达式的定义有较多的语法,并且较长的正则表达式往往可读性不高。因此,对于初学正则表达式的读者会有一定的困难。20.2正则表达式的语法正则表达式是一种标准,并非Flex特有。正则表达式的语法较多,由于本书篇幅有限,将只介绍入门级别的语法知识。但对于在Flex应用程序中使用正则表达式已经够用。20.2.1元字符元字符是正则表达式中最基本的元素,用于匹配最基本字符。20.2.2转义字符若用户要匹配元字符或其他有特殊意义的字符,如“.”、“\”、“(”等,就需要使用转义字符。正则表达式中的转义字符在字符前加反斜杠“\”,如“\.”、“\\”、“\(”等。20.2.3限定符限定符用于确定重复方式。例如,“*”表示0个或多个,“{2}”表示2个。20.2.4字符集合字符集合用于匹配集合内的字符,使用“[]”操作符表示。20.2.5反义有时用户需要查找不属于某个能简单定义的字符,如查找除数字外的其他任意字符。此时需要使用反义。20.2.6多规则多规则是指正则表达式可有多种规则,规则间以“|”符分隔。例如,“\d+|[0-9a-z]+”表达匹配多个数字组成的字符串或由数字、小写字母混合的字符串。以下正则表达式匹配两种以连字号“-”分隔的电话号码。一种是前3位区号,8位本地号,如011-43432423。另一种是前4位区号,7位本地号,如0343-4324246。20.2.7子表达式前面章节中介绍如何重复单个字符,若要重复多个字符就需要使用子表达式。子表达式用括号将多个字符联合起来,如“(\d\w\d)”、“(\d[a-z])”等。子表达式是正则表达式中最常使用的语法之一。20.3使用RegexTester工具测试正则表达式由于正则表达式表示复杂,也难免疏漏条件。RegexTester是一款绿色、小巧的测试工具,用以测试正则表达式是否正确。通过RegexTester工具用户可以快速地发现正则表达式中的错误码并纠正。20.4Flex4.0中使用正则表达式正则表达式可用于匹配查找字符串中符合某种规则的字符子串,也可使用正则表达式来验证输入数据。本节将介绍如何在Flex3.0中定义和使用正则表达式。20.4.1使用RegExp类定义正则表达式1.使用“/”符定义正则表达式2.使用字符串定义正则表达式20.4.2使用RegExp类匹配数据1.使用RegExp类的exec()方法匹配数据2.使用RegExp类的test()方法匹配数据3.使用String类的match()方法匹配数据20.4.3Flex中使用正则表达式实例前面章节中介绍过使用验证组件来规范输入数据。使用正则表达式也可完成此功能。正则表达式相比验证组件的优势在于,正则表达式定义简单、灵活、方便。使用正则表达式可以非常方便地规范任何条件的数据。20.5小结本章介绍了正则表达式的定义语法,如何在Flex中使用正则表达式。使用正则表达式可高效地匹配查找符合规则的子串。正则表达式可方便地定义复杂的规则。对于复杂的规则,若采用代码来表示,会产生较多的代码行,并且逻辑复杂、容易出错。另外,使用正则表达式远比自定义的算法效率要高。