精华内容
下载资源
问答
  • Flex 正则表达式

    千次阅读 2012-05-18 19:00:15
    Flex正则表达式中的通用规则 Flex正则表达式有很多值得学习的地方,本文向大家介绍一下Flex正则表达式中的通用规则,希望本文的介绍能让你有所收获。 本文和大家重点讨论一下Flex正则表达式的其他通用...

    Flex正则表达式中的通用规则

    Flex正则表达式有很多值得学习的地方,本文向大家介绍一下Flex正则表达式中的通用规则,希望本文的介绍能让你有所收获。

    本文和大家重点讨论一下Flex正则表达式的其他通用规则,首先让我们看一下Flex正则表达式的概念和作用,Flex正则表达式(regularexpression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。

    引言

    Flex正则表达式(regularexpression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如表达式“ab+”描述的特征是“一个'a'和任意个'b'”,那么'ab','abb','abbbbbbbbbb'都符合这个特征。

    Flex正则表达式可以用来:

    (1)验证字符串是否符合指定特征,比如验证是否是合法的邮件地址。
    (2)用来查找字符串,从一个长的文本中查找符合指定特征的字符串,比查找固定字符串更加灵活方便。
    (3)用来替换,比普通的替换更强大。

    Flex正则表达式学习起来其实是很简单的,不多的几个较为抽象的概念也很容易理解。之所以很多人感觉Flex正则表达式比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难;另一方面,各种引擎自带的文档一般都要介绍它特有的功能,然而这部分特有的功能并不是我们首先要理解的。下面看一下Flex正则表达式中的其他通用规则。

    1.其他通用规则

    还有一些在各个Flex正则表达式引擎之间比较通用的规则,在前面的讲解过程中没有提到。

    1.1表达式中,可以使用"\xXX"和"\uXXXX"表示一个字符("X"表示一个十六进制数)

    形式 字符范围

    \xXX
    编号在0~255范围的字符,比如:空格可以使用"\x20"表示

    \uXXXX
    任何字符可以使用"\u"再加上其编号的4位十六进制数表示,比如:"\中"


    1.2在Flex正则表达式"\s","\d","\w","\b"表示特殊意义的同时,对应的大写字母表示相反的意义

    表达式可匹配

    \S
    匹配所有非空白字符("\s"可匹配各个空白字符)

    \D
    匹配所有的非数字字符

    \W
    匹配所有的字母、数字、下划线以外的字符

    \B
    匹配非单词边界,即左右两边都是"\w"范围或者左右两边都不是"\w"范围时的字符缝隙


    1.3在Flex正则表达式中有特殊意义,需要添加"\"才能匹配该字符本身的字符汇总

    字符说明

    ^
    匹配输入字符串的开始位置。要匹配"^"字符本身,请使用"\^"

    $
    匹配输入字符串的结尾位置。要匹配"$"字符本身,请使用"\$"

    ()
    标记一个子表达式的开始和结束位置。要匹配小括号,请使用"\("和"\)"

    []
    用来自定义能够匹配'多种字符'的表达式。要匹配中括号,请使用"\["和"\]"

    {}
    修饰匹配次数的符号。要匹配大括号,请使用"\{"和"\}"

    .
    匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用"\."

    ?
    修饰匹配次数为0次或1次。要匹配"?"字符本身,请使用"\?"

    +
    修饰匹配次数为至少1次。要匹配"+"字符本身,请使用"\+"

    *
    修饰匹配次数为0次或任意次。要匹配"*"字符本身,请使用"\*"

    |
    左右两边表达式之间"或"关系。匹配"|"本身,请使用"\|"

    1.4括号"()"内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用"(?:xxxxx)"格式

    举例1:表达式"(?\w)\1)+"匹配"abbccddefg"时,结果是"bbccdd"。括号"(?"范围的匹配结果不进行记录,因此"(\w)"使用"\1"来引用。

    1.5常用的Flex正则表达式属性设置简介:Ignorecase,Singleline,Multiline,Global

    表达式属性说明

    Ignorecase

    默认情况下,表达式中的字母是要区分大小写的。配置为Ignorecase可使匹配时不区分大小写。有的表达式引擎,把"大小写"概念延伸至UNICODE范围的大小写。

    Singleline

    默认情况下,小数点"."匹配除了换行符(\n)以外的字符。配置为Singleline可使小数点可匹配包括换行符在内的所有字符。

    Multiline

    默认情况下,表达式"^"和"$"只匹配字符串的开始①和结尾④位置。如:

    ①xxxxxxxxx②\n
    ③xxxxxxxxx④

    配置为Multiline可以使"^"匹配①外,还可以匹配换行符之后,下一行开始前③的位置,使"$"匹配④外,还可以匹配换行符之前,一行结束②的位置。

    Global

    主要在将表达式用来替换时起作用,配置为Global表示替换所有的匹配。




    常用的正则表达式

    常用正则表达式

    正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

    用户名:/^[a-z0-9_-]{3,16}$/

    密码:/^[a-z0-9_-]{6,18}$/

    十六进制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/

    电子邮箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/

    URL:/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

    IP 地址:/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/

    HTML 标签:/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/

    Unicode编码中的汉字范围:/^[u4e00-u9fa5],{0,}$/

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

    匹配双字节字符(包括汉字在内):[^\x00-\xff]
    评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

    匹配空白行的正则表达式:\n\s*\r
    评注:可以用来删除空白行

    匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
    评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

    匹配首尾空白字符的正则表达式:^\s*|\s*$
    评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    评注:表单验证时很实用

    匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
    评注:网上流传的版本功能很有限,上面这个基本可以满足需求

    匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    评注:表单验证时很实用

    匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
    评注:匹配形式如 0511-4405222 或 021-87888822

    匹配腾讯QQ号:[1-9][0-9]{4,}
    评注:腾讯QQ号从10000开始

    匹配中国大陆邮政编码:[1-9]\d{5}(?!\d)
    评注:中国大陆邮政编码为6位数字

    匹配身份证:\d{15}|\d{18}
    评注:中国大陆的身份证为15位或18位

    匹配ip地址:\d+\.\d+\.\d+\.\d+
    评注:提取ip地址时有用

    匹配特定数字:
    ^[1-9]\d*$    //匹配正整数
    ^-[1-9]\d*$   //匹配负整数
    ^-?[1-9]\d*$   //匹配整数
    ^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
    ^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
    ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
    ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
    ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
    ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
    评注:处理大量数据时有用,具体应用时注意修正

    匹配特定字符串:
    ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
    ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
    ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
    ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
    ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

    表达式全集

    正则表达式有多种不同的风格。下表是在PCRE中元字符及其在正则表达式上下文中的行为的一个完整列表:

    字符描述
    \将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、
    或一个八进制转义符。例如,“n”匹配字符“n”。“\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。
    ^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,
    ^也匹配“\n”或“\r”之后的位置。
    $匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,
    $也匹配“\n”或“\r”之前的位置。
    *匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。
    *等价于{0,}。
    +匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,
    但不能匹配“z”。+等价于{1,}。
    ?匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配
    do”或“does”中的“do”。?等价于{0,1}。
    {n}n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,
    但是能匹配“food”中的两个o。
    {n,}n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,
    但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
    {n,m}mn均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,
    o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。
    请注意在逗号和两个数之间不能有空格。
    ?当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。
    非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的
    字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
    .匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[.\n]”的模式。
    (pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在
    VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,
    请使用“\(”或“\)”。
    (?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
    这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
    (?=pattern)正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,
    也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)
    能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查
    不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,
    而不是从包含预查的字符之后开始。
    (?!pattern)负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,
    也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配
    Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,
    也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,
    而不是从包含预查的字符之后开始
    x|y匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
    [xyz]字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
    [^xyz]负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”。
    [a-z]字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围
    内的任意小写字母字符。
    [^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配
    任何不在“a”到“z”范围内的任意字符。
    \b匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹配“never”中的“er”,
    但不能匹配“verb”中的“er”。
    \B匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
    \cx匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z
    或a-z之一。否则,将c视为一个原义的“c”字符。
    \d匹配一个数字字符。等价于[0-9]。
    \D匹配一个非数字字符。等价于[^0-9]。
    \f匹配一个换页符。等价于\x0c和\cL。
    \n匹配一个换行符。等价于\x0a和\cJ。
    \r匹配一个回车符。等价于\x0d和\cM。
    \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]。
    \S匹配任何非空白字符。等价于[^\f\n\r\t\v]。
    \t匹配一个制表符。等价于\x09和\cI。
    \v匹配一个垂直制表符。等价于\x0b和\cK。
    \w匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
    \W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
    \xn匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,
    \x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。.
    \num匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
    \n标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,
    n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
    \nm标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向
    后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条
    件都不满足,若nm均为八进制数字(0-7),则\nm将匹配八进制转义值nm
    \nml如果n为八进制数字(0-3),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
    \un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。
    例如,\u00A9匹配版权符号(?)。

    以下是以PHP的语法所写的示例

    验证字符串是否只含数字与英文,字符串长度并在4~16个字符之间

    <?php
    $str = 'a1234';
    if (preg_match("^[a-zA-Z0-9]{4,16}$", $str)) {
        echo "验证成功";
    } else {
        echo "验证失败";
    }
    ?>
    

    简易的台湾身份证字号验证

    <?php
    $str = 'a1234';
    if (preg_match("/^\w[12]\d{8}$/", $str)) {
        echo "验证成功";
    } else {
        echo "验证失败";
    }
    ?>
    

    以下示例是用 Perl 语言写的,与上面的示例功能相同

    print $str = "a1234" =~ m:^[a-zA-Z0-9]{4,16}$: ? "COMFIRM" : "FAILED";
    
    print $str = "a1234" =~ m"^\w[12]\d{8}$" ? "COMFIRM" : "INVAILD";
    

    如何写出高效率的正则表达式

    如果纯粹是为了挑战自己的正则水平,用来实现一些特效(例如使用正则表达式计算质数、解线性方程),效率不是问题;如果所写的正则表达式只

    是为了满足一两次、几十次的运行,优化与否区别也不太大。但是,如果所写的正则表达式会百万次、千万次地运行,效率就是很大的问题了。我这

    里总结了几条提升正则表达式运行效率的经验(工作中学到的,看书学来的,自己的体会),贴在这里。如果您有其它的经验而这里没有提及,欢迎

    赐教。

    为行文方便,先定义两个概念。

    误匹配:指正则表达式所匹配的内容范围超出了所需要范围,有些文本明明不符合要求,但是被所写的正则式“击中了”。例如,如果使用\d{11}来匹配

    11位的手机号,\d{11}不单能匹配正确的手机号,它还会匹配98765432100这样的明显不是手机号的字符串。我们把这样的匹配称之为误匹配。

    漏匹配:指正则表达式所匹配的内容所规定的范围太狭窄,有些文本确实是所需要的,但是所写的正则没有将这种情况囊括在内。例如,使用\d{18}

    来匹配18位的身份证号码,就会漏掉结尾是字母X的情况。

      写出一条正则表达式,既可能只出现误匹配(条件写得极宽松,其范围大于目标文本),也可能只出现漏匹配(只描述了目标文本中多种情况种的一

      种),还可能既有误匹配又有漏匹配。例如,使用\w+\.com来匹配.com结尾的域名,既会误匹配abc_.com这样的字串(合法的域名中不含下划线,

      \w包含了下划线这种情况),又会漏掉ab-c.com这样的域名(合法域名中可以含中划线,但是\w不匹配中划线)。

      精准的正则表达式意味着既无误匹配且无漏匹配。当然,现实中存在这样的情况:只能看到有限数量的文本,根据这些文本写规则,但是这些规则将

      会用到海量的文本中。这种情况下,尽可能地(如果不是完全地)消除误匹配以及漏匹配,并提升运行效率,就是我们的目标。本文所提出的经验,

      主要是针对这种情况。

      掌握语法细节。正则表达式在各种语言中,其语法大致相同,细节各有千秋。明确所使用语言的正则的语法的细节,是写出正确、高效正则表达式的

      基础。例如,perl中与\w等效的匹配范围是[a-zA-Z0-9_];perl正则式不支持肯定逆序环视中使用可变的重复(variable repetition inside lookbehind,

      例如(?<=.*)abc),但是.Net语法是支持这一特性的;又如,JavaScript连逆序环视(Lookbehind,如(?<=ab)c)都不支持,而perl和python是支持的。

      《精通正则表达式》第3章《正则表达式的特性和流派概览》明确地列出了各大派系正则的异同,这篇文章也简要地列出了几种常用语言、工具中正

      则的比较。对于具体使用者而言,至少应该详细了解正在使用的那种工作语言里正则的语法细节。

      先粗后精,先加后减。使用正则表达式语法对于目标文本进行描述和界定,可以像画素描一样,先大致勾勒出框架,再逐步在局步实现细节。仍举

      刚才的手机号的例子,先界定\d{11},总不会错;再细化为1[358]\d{9},就向前迈了一大步(至于第二位是不是3、5、8,这里无意深究,只举这样

      一个例子,说明逐步细化的过程)。这样做的目的是先消除漏匹配(刚开始先尽可能多地匹配,做加法),然后再一点一点地消除误匹配(做减法)

      。这样有先有后,在考虑时才不易出错,从而向“不误不漏”这个目标迈进。

      留有余地。所能看到的文本sample是有限的,而待匹配检验的文本是海量的,暂时不可见的。对于这样的情况,在写正则表达式时要跳出所能见到

      的文本的圈子,开拓思路,作出“战略性前瞻”。例如,经常收到这样的垃圾短信:“发*票”、“发#漂”。如果要写规则屏蔽这样烦人的垃圾短信,不但

      要能写出可以匹配当前文本的正则表达式 发[*#](?:票|漂),还要能够想到 发.(?:票|漂|飘)之类可能出现的“变种”。这在具体的领域或许会有针对性的

      规则,不多言。这样做的目的是消除漏匹配,延长正则表达式的生命周期。

      明确。具体说来,就是谨慎用点号这样的元字符,尽可能不用星号和加号这样的任意量词。只要能确定范围的,例如\w,就不要用点号;只要能够

      预测重复次数的,就不要用任意量词。例如,写析取twitter消息的脚本,假设一条消息的xml正文部分结构是<span class=”msg”>…</span>且正文

      中无尖括号,那么<span class=”msg”>[^<]{1,480}</span>这种写法的思路要好于<span class=”msg”>.*</span>,原因有二:一是使用[^<],它保

      证了文本的范围不会超出下一个小于号所在的位置;二是明确长度范围,{1,480},其依据是一条twitter消息大致能的字符长度范围。当然,480这

      个长度是否正确还可推敲,但是这种思路是值得借鉴的。说得狠一点,“滥用点号、星号和加号是不环保、不负责任的做法”。

      不要让稻草压死骆驼。每使用一个普通括号()而不是非捕获型括号(?:…),就会保留一部分内存等着你再次访问。这样的正则表达式、无限次地运

      行次数,无异于一根根稻草的堆加,终于能将骆驼压死。养成合理使用(?:…)括号的习惯。

      宁简勿繁。将一条复杂的正则表达式拆分为两条或多条简单的正则表达式,编程难度会降低,运行效率会提升。例如用来消除行首和行尾空白字

      符的正则表达式s/^\s+|\s+$//g;,其运行效率理论上要低于s/^\s+//g; s/\s+$//g; 。这个例子出自《精通正则表达式》第五章,书中对它的评论是“它

      几乎总是最快的,而且显然最容易理解”。既快又容易理解,何乐而不为?工作中我们还有其它的理由要将C==(A|B)这样的正则表达式拆为A和B两

      条表达式分别执行。例如,虽然A和B这两种情况只要有一种能够击中所需要的文本模式就会成功匹配,但是如果只要有一条子表达式(例如A)会

      产生误匹配,那么不论其它的子表达式(例如B)效率如何之高,范围如何精准,C的总体精准度也会因A而受到影响。

      巧妙定位。有时候,我们需要匹配的the,是作为单词的the(两边有空格),而不是作为单词一部分的t-h-e的有序排列(例如together中的the)。

      在适当的时候用上^$\b等等定位锚点,能有效提升找到成功匹配、淘汰不成功匹配的效率。

      展开全文
    • Flex正则表达式

      千次阅读 2015-10-22 15:28:21
      1.Flex正则表达式规则 1.1普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。 举例1:表达式"c...

      1.Flex正则表达式规则

      1.1普通字符

      字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

      举例1:表达式"c",在匹配字符串"abcde"时,匹配结果是:成功;匹配到的内容是:"c";匹配到的位置是:开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)

      举例2:表达式"bcd",在匹配字符串"abcde"时,匹配结果是:成功;匹配到的内容是:"bcd";匹配到的位置是:开始于1,结束于4。


      1.2简单的转义字符

      Flex正则表达式中一些不便书写的字符,采用在前面加""的方法。这些字符其实我们都已经熟知了。

      表达式可匹配

      \r,\n
      代表回车和换行符

      \t
      制表符

      \\
      代表""本身


      ◆还有其他一些在后边章节中有特殊用处的标点符号,在前面加""后,就代表该符号本身。比如:^,$都有特殊意义,如果要想匹配字符串中"^"和"$"字符,则表达式就需要写成"\^"和"\$"。

      表达式可匹配

      \^
      匹配^符号本身

      \$
      匹配$符号本身

      \.
      匹配小数点(.)本身


      这些转义字符的匹配方法与"普通字符"是类似的。也是匹配与之相同的一个字符。

      举例1:表达式"\$d",在匹配字符串"abc$de"时,匹配结果是:成功;匹配到的内容是:"$d";匹配到的位置是:开始于3,结束于5。

      1.3能够与'多种字符'匹配的表达式

      Flex正则表达式中的一些表示方法,可以匹配'多种字符'其中的任意一个字符。比如,表达式"\d"可以匹配任意一个数字。虽然可以匹配其中任意字符,但是只能是一个,不是多个。这就好比玩扑克牌时候,大小王可以代替任意一张牌,但是只能代替一张牌。

      表达式可匹配

      \d
      任意一个数字,0~9中的任意一个

      \w
      任意一个字母或数字或下划线,也就是A~Z,a~z,0~9,_中任意一个

      \s
      包括空格、制表符、换页符等空白字符的其中任意一个

      .
      小数点可以匹配除了换行符(\n)以外的任意一个字符

      举例1:表达式"\d\d",在匹配"abc123"时,匹配的结果是:成功;匹配到的内容是:"12";匹配到的位置是:开始于3,结束于5。

      举例2:表达式"a.\d",在匹配"aaa100"时,匹配的结果是:成功;匹配到的内容是:"aa1";匹配到的位置是:开始于1,结束于4。


      1.4自定义能够匹配'多种字符'的表达式

      Flex正则表达式中使用方括号[]包含一系列字符,能够匹配其中任意一个字符。用[^]包含一系列字符,则能够匹配其中字符之外的任意一个字符。同样的道理,虽然可以匹配其中任意一个,但是只能是一个,不是多个。

      表达式可匹配

      [ab5@]
      匹配"a"或"b"或"5"或"@"

      [^abc]
      匹配"a","b","c"之外的任意一个字符

      [f-k]
      匹配"f"~"k"之间的任意一个字母

      [^A-F0-3]
      匹配"A"~"F","0"~"3"之外的任意一个字符

      举例1:表达式"[bcd][bcd]"匹配"abc123"时,匹配的结果是:成功;匹配到的内容是:"bc";匹配到的位置是:开始于1,结束于3。

      举例2:表达式"[^abc]"匹配"abc123"时,匹配的结果是:成功;匹配到的内容是:"1";匹配到的位置是:开始于3,结束于4。

      http://hi.baidu.com/fengpingfan123/blog/item/9a0ffdef3be51b2fadafd5cc.html

      谈谈正则表达式,AS3.0中引进了正则表达式。正则表达式是用于验证文本值是否符合特定模式。
      正则表达式有四个部分。1元子符。2元序列。3标志。4数量表达符。
      可以这样看 pattern RegExp= /匹配字符串元字符元序列/标志当然顺序可能不完全是这样.别把他想的太复杂其实他就是个组合。
      现在我们来看看元字符: ^ $ \ . * + ? ( ) [ ] { } |
      前面说的是转义字符串的使用

       

      元子符


      1.^的用法:匹配字符串的开头
      var pattern:RegExp=/^小虫/;
      var str:String="小虫是好人";
      trace(str, " is valid:", pattern.test(str));小虫是好人 is valid: true


      2.$的用法:匹配字符串的结尾
      var pattern:RegExp=/lizhen$/;
      var str:String="My name is lizhen";
      trace(str, " is valid:", pattern.test(str));小虫是好人 is valid: true
      仔细看一下两个符号在匹配字符串中的位置,注意:如果同时使用^符号和$符号,将进行精确匹配。


      3.\的用法:匹配字符串的结尾
      如果匹配字符串中包含有"/"比如 1/2 的时候,使用如下定义
      var pattern:RegExp = /1\/2/;
      var str:String="1/2是多少?";
      trace(str, " is valid:", pattern.test(str));1/2是多少? is valid: true
      如果匹配字符串中包含有""比如 "lizhen" 的时候,使用如下定义
      var pattern:RegExp=/"lizhen"/;
      var str:String="My name is "lizhen"";

      trace(str, " is valid:", pattern.test(str));My name is "lizhen" is valid: true


      4.*的用法:匹配0个或多个前面的字符.
      var pattern:RegExp=/我的*/;
      var str:String="我的我的我的";或者var str:String="我的"

      trace(str, " is valid:", pattern.test(str));我的我的... is valid: true


      5.+的用法:匹配至少一个前面的字符
      var pattern:RegExp=/我的+/;
      var str:String="我的ID是...";或者var str:String="我的"

      trace(str, " is valid:", pattern.test(str));我的ID是... is valid: true
      注意+和*的区别。如果var str:String="我的"那就会显示false


      6.?的用法:匹配0个或1个前面的字符
      var pattern:RegExp=/天?/;
      var str:String="一天快乐";或者var str:String="天天快乐";
      trace(str, " is valid:", pattern.test(str));一天快乐 is valid: true


      7..的用法:匹配任意单个字符
      var pattern:RegExp=/天./;
      var str:String="一天快乐";或者var str:String="天天快乐";
      trace(str, " is valid:", pattern.test(str));一天快乐 is valid: true


      8.[ ]的用法:匹配某一个范围而不局限于具体的单个字符
      var pattern:RegExp=/[a-z]/
      var str:String="a"
      trace(str, " is valid:", pattern.test(str));a is valid: true


      9.( )的用法:这个就相当于是个集合
      var pattern:RegExp=/([a-z][A-Z][0-9])+/ 比如说这个就是定义了一个四个字符的字符串第一个字符是a到z之间的字符第二个是A到Z之间的字符第三个是0-9之间的字符,第四个重复前面的数字。
      var str:String="aD77aaaaaaaaaaaaaaaa"
      trace(str, " is valid:", pattern.test(str));aD77aaaaaaaaaaaaaaaa is valid: true


      10.|的用法:匹配左边或者右边的字符。
      var pattern:RegExp=/小虫|lizhen/
      var str:String="小虫是好人"
      trace(str, " is valid:", pattern.test(str));小虫是好人 is valid: true


      元序列

      元序列是在正则表达式模式中具有特殊含义的字符序列

      {n} {n,} {n,m} \b \B \d \D \f \n \r \s \S \t \unnnn \v \w \w \W \xnn


      1.{n}的用法:匹配恰好n个(n为非负整数)前面的字符。
      var pattern:RegExp=/(小虫){2}/ 对象中连续出现2次小虫.注意下(),如果用var pattern:RegExp=/小虫{2}/ 那么就是var str:String="小虫虫"
      var str:String="小虫小虫"
      trace(str, " is valid:", pattern.test(str));小虫小虫 is valid: true.


      2.{n,}的用法:匹配恰好n个(n为非负整数)或更多个前面的字符。


      3.{n,m}的用法:匹配至少n个,至多m个前面的字符


      4.\b的用法:匹配单词字符和非单词字符之间的位置只能放在开头和结尾。

      NN的,他不支持中文.用中文还是用^.
      var pattern:RegExp=/\b小虫/
      var pattern:RegExp=/.mp3\b/
      var str:String="小虫.mp3"可以判断是否是mp3格式。
      trace(str," is valid:", pattern.test(str));小虫.mp3 is valid: true


      5.\B的用法:匹配对象必须位于目标字符串的开头和结尾两个边界之内

      即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾和\b相反。
      var pattern:RegExp=/\B是/
      var str:String="我是虫子"
      trace(str," is valid:", pattern.test(str));我是虫子 is valid: true


      6.\d的用法:用于匹配从0到9的数字
      var pattern:RegExp=/\b\d/ 开头的第一字符必须为数字
      var str:String="900/元"
      trace(str," is valid:", pattern.test(str)); 900/元 is valid: true


      7.\D的用法:匹配除数字以外的任何字符
      var pattern:RegExp=/\b\D/ 开头的第一字符必须不为数字
      var str:String="a900/元"
      trace(str," is valid:", pattern.test(str)); a900/元 is valid: true


      8.\f的用法:匹配换页符DOS操作时代的概念


      9.\n的用法:匹配换行符
      var pattern:RegExp=/\n/
      var str:String="欢迎来到虫子的空间!\n"
      trace(str," is valid:", pattern.test(str));

       
      10.\r的用法:匹配回车符
      var pattern:RegExp=/\r/
      var str:String="欢迎来到虫子的空间!\r"
      trace(str," is valid:", pattern.test(str));


      11.\s的用法:匹配任何空白字符(空格、制表符、换行符或回车符)
      var pattern:RegExp=/\s/
      var str:String="欢迎来到虫子的 空间!"
      trace(str," is valid:", pattern.test(str)); 欢迎来到虫子的 空间! is valid: true


      12.\S的用法:匹配除空白字符以外的任何字符
      var pattern:RegExp=/\S/
      var str:String="欢迎来到虫子的空间!"
      trace(str," is valid:", pattern.test(str)); 欢迎来到虫子的空间! is valid: true


      13.\t的用法:匹配制表符DOS操作时代的概念


      14.\unnnn用法:匹配字符代码由十六进制数字 nnnn 指定的 Unicode 字符

      例如,\u263a 是一个笑脸字符
      var pattern:RegExp=/\u263a/
      var str:String="欢迎来到虫子的空间!\u263a"
      trace(str," is valid:", pattern.test(str)); 欢迎来到虫子的空间!☺ is valid: true


      15.\v 用法:匹配垂直换页符DOS操作时代的概念


      16.\w用法:匹配单词字符(A-Z、a-z、0-9 或 _)。

      请注意,\w不匹配非英文字符,如é、ñ 或 ç。他和[]是有区别的。
      var pattern:RegExp=/^\w/
      var str:String="a虫子"
      var str:String="0虫子"
      var str:String="A虫子"
      var str:String="_虫子"
      trace(str," is valid:", pattern.test(str));_虫子 is valid: true


      17.\W用法:匹配除单词字符以外的任何字符
      var pattern:RegExp=/^\W/
      var str:String="虫子"
      trace(str," is valid:", pattern.test(str));虫子 is valid: true


      18.\xnn用法:匹配具有指定 ASCII 值(由十六进制数字 nn 定义)的字符。
      var pattern:RegExp=/^\x41/;"A"
      var str:String="ABCD";
      trace(str," is valid:", pattern.test(str));ABCD is valid: true


      标志:

      标志可以作为正则表达式对象属性进行访问。

       

      正则表达式有五个标志:g i m s x


      1.g的用法:如果不指定g,那么在查找的时候只会返回一个。

      如:
      var str:String = "she sells seashells by the seashore.";
      var pattern:RegExp = /sh\w*/;
      trace(str.match(pattern)) 输出:she
      指定g后:
      var str:String = "she sells seashells by the seashore.";
      var pattern:RegExp = /sh\w*/g;
      trace(str.match(pattern)) 输出:she,shells,shore


      2.i的用法:默认情况下,正则表达式匹配区分大小写。如果设置 i (ignoreCase) 标志,将忽略区分大小写。
      var str:String = "She sells seaShells by the seaShore.";
      var pattern:RegExp = /sh\w*/gi;
      trace(str.match(pattern)) 输出:She,Shells,Shore


      3.m的用法:匹配"行"的开头和结尾.注意这里的行只有 \n 字符表示行的结束,其余的都不行。包括\r。比如:
      var str:String = "She sells seaShells by the seaShore.\n";
      str+="She's your mother"
      var pattern:RegExp = /^sh\w*/gim;
      trace(str.match(pattern)) 输出:She,She
      也可以在结尾使用.比如:
      var str:String = "She sells seaShells by the seaShore.\n";
      str+="She's your mother.\n"
      var pattern:RegExp = /\n\$\w*/gim;
      trace("====="+str.match(pattern)) 输出:=====


      4.s的用法:用点来匹配换行符
      var str:String = "<p>Test\n";
      str += "Multiline</p>";
      var re:RegExp = /<p>.*?<\/p>/s;
      trace(str.match(re));


      5.x的用法:在正则表达式中使用 x (extended) 标志时,则会忽略在模式中键入的所有空格。
      var str:String = "lizhen";
      var re:RegExp = /li zhen/x
      trace(str.match(re));输出:lizhen

       

      数量表示符


      使用数量表示符指定字符或序列在模式中的重复次数,如下所示:

      数量表示符元字符
       描述
       
      *(星号)
       匹配前面重复零次或多次的项目。
       
      +(加号)
       匹配前面重复一次或多次的项目。
       
      ?(问号)
       匹配前面重复零次或一次的项目。
       
      {n}

      {n,}

      {n,n}
       指定前一项目的数值数量或数量范围:

      /A{27}/ 匹配重复 27 次的字符 A。

      /A{3,}/ 匹配重复 3 次或更多次的字符 A。

      /A{3,5}/ 匹配重复 3 到 5 次的字符 A。
       

      您可以将数量表示符应用到单个字符、字符类或组:

      /a+/ 匹配重复一次或多次的字符 a。

      /\d+/ 匹配一个或多个数字。

      /[abc]+/ 匹配重复的一个或多个字符,这些字符可能是 a、b 或 c 中的某个。

      /(very, )*/ 匹配重复零次或多次的后跟逗号和空格的单词 very。

      您可以在应用数量表示符的括号组内使用数量表示符。例如,下面的数量表示符匹配诸如 word 和 word-word-word 的字符串:

      /\w+(-\w+)*/
      默认情况下,正则表达式执行所谓的“无限匹配”。正则表达式中的任何子模式(如 .*)都会尝试在字符串中匹配尽可能多的字符,然后再执行正则表达式的下一部分。例如,使用以下正则表达式和字符串:

      var pattern:RegExp = /<p>.*<\/p>/;
      str:String = "<p>Paragraph 1</p> <p>Paragraph 2</p>";
      正则表达式匹配整个字符串:

      <p>Paragraph 1</p> <p>Paragraph 2</p>
      但是,假如您只想匹配一个 <p>...</p> 组。则可以通过以下操作实现:

      <p>Paragraph 1</p>
      在所有数量表示符后添加问号 (?) 以将其更改为所谓的“惰性数量表示符”。例如,下面的正则表达式使用惰性数量表示符 *? 匹配 <p> 后跟数量最少(惰性)的字符,再跟 </p> 的模式:

      /<p>.*?<\/p>/
      有关数量表示符,请牢记以下几点:

      数量表示符 {0} 和 {0,0} 不会从匹配中排除项目。

      不要结合使用多个数量表示符,例如 /abc+*/ 中。

      在除非设置 s (dotall) 标志,否则不会跨越多行,即使后跟 * 数量表示符。例如,请考虑使用以下代码:

      var str:String = "<p>Test\n";
      str += "Multiline</p>";
      var re:RegExp = /<p>.*<\/p>/;
      trace(str.match(re)); // null;
       
      re = /<p>.*<\/p>/s;
      trace(str.match(re));
          // output: <p>Test
          //                    Multiline</p>

       

      常用的正则表达式语句

      ^\d+$  //匹配非负整数(正整数 + 0)
      ^[0-9]*[1-9][0-9]*$  //匹配正整数
      ^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0)
      ^-[0-9]*[1-9][0-9]*$  //匹配负整数
      ^-?\d+$    //匹配整数
      ^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0)
      ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数
      ^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)
      ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ //匹配负浮点数
      ^(-?\d+)(\.\d+)?$  //匹配浮点数
      ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
      ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
      ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
      ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
      ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
      ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址
      ^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$  //匹配url

      匹配中文字符的正则表达式: [\u4e00-\u9fa5]
      匹配双字节字符(包括汉字在内):[^\x00-\xff]
      匹配空行的正则表达式:\n[\s| ]*\r
      匹配HTML标记的正则表达式:/<(.*)>.*<\/>|<(.*) \/>/
      匹配首尾空格的正则表达式:(^\s*)|(\s*$)
      匹配Email地址的正则表达式:

      \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(没有加反斜杠转义,错!)

      ^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$(正确)

      ^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$(企业级的程序里copy出来的。)
      匹配网址URL的正则表达式:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
      匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
      匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
      匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$


      下表是元字符及其在正则表达式上下文中的行为的一个完整列表:
      \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
      ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
      $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
      * 匹配前面的子表达式零次或多次。
      + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。
      ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。
      {n} n 是一个非负整数,匹配确定的n 次。
      {n,} n 是一个非负整数,至少匹配n 次。
      {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。
      ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。
      . 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。
      (pattern) 匹配pattern 并获取这一匹配。
      (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。
      (?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。
      (?!pattern) 负向预查,与(?=pattern)作用相反
      x|y 匹配 x 或 y。
      [xyz] 字符集合。
      [^xyz] 负值字符集合。
      [a-z] 字符范围,匹配指定范围内的任意字符。
      [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。
      \b 匹配一个单词边界,也就是指单词和空格间的位置。
      \B 匹配非单词边界。
      \cx 匹配由x指明的控制字符。
      \d 匹配一个数字字符。等价于 [0-9]。

      \D 匹配一个非数字字符。等价于 [^0-9]。
      \f 匹配一个换页符。等价于 \x0c 和 \cL。
      \n 匹配一个换行符。等价于 \x0a 和 \cJ。
      \r 匹配一个回车符。等价于 \x0d 和 \cM。
      \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
      \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
      \t 匹配一个制表符。等价于 \x09 和 \cI。
      \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
      \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
      \W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。
      \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。
      \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。
      \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
      \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

      \nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八


      参考:http://blog.sina.com.cn/s/blog_8843dc110100x5cf.html

      展开全文
    • Flex 正则表达式大集

      2010-08-19 21:15:35
      Flex 正则表达式 搜集了 很久了!
    • flex正则表达式

      2013-09-05 15:16:00
      正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里收集了一些常用的正则表达式语句,大家用到的时候就不用自己写了 ^\d+$ //匹配非负整数(正整数 + 0) ^[0-9]*[1-9][0-9]*$ //...

      正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里收集了一些常用的正则表达式语句,大家用到的时候就不用自己写了

       ^\d+$  //匹配非负整数(正整数 + 0)

      ^[0-9]*[1-9][0-9]*$  //匹配正整数

      ^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0)

      ^-[0-9]*[1-9][0-9]*$  //匹配负整数

      ^-?\d+$    //匹配整数

      ^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0)

      ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数

      ^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)

      ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数

      ^(-?\d+)(\.\d+)?$  //匹配浮点数

      ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串

      ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串

      ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串

      ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串

      ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

      ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址

      ^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ 

      ^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$  //匹配ip 

      //匹配url 匹配中文字符的正则表达式: [\u4e00-\u9fa5]

      匹配双字节字符(包括汉字在内):[^\x00-\xff]

      匹配空行的正则表达式:\n[\s| ]*\r

      匹配HTML标记的正则表达式:/<(.*)>.*<\/>|<(.*) \/>/

      匹配首尾空格的正则表达式:(^\s*)|(\s*$)

      匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

      匹配网址URL的正则表达式:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$

      匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

      匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?

      匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$

      下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

      \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

      ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。

      $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。

      * 匹配前面的子表达式零次或多次。 + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。

      ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 {n} n 是一个非负整数,匹配确定的n 次。

      {n,} n 是一个非负整数,至少匹配n 次。 {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。

      ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

       . 匹配除 “\n” 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。

       (pattern) 匹配pattern 并获取这一匹配。

       (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 (?=pattern) 正向预查,在任何匹配 pattern 的字 即ζヅ洳檎易址 U馐且桓龇腔袢∑ヅ洌 簿褪撬担 闷ヅ洳恍枰 袢」┮院笫褂谩? (?!pattern) 负向预查,与(?=pattern)作用相反 x|y 匹配 x 或 y。

       [xyz] 字符集合。 [^xyz] 负值字符集合。

       [a-z] 字符范围,匹配指定范围内的任意字符。

       [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。

       \b 匹配一个单词边界,也就是指单词和空格间的位置。

      \B 匹配非单词边界。

      \cx 匹配由x指明的控制字符。

       \d 匹配一个数字字符。等价于 [0-9]。

      \D 匹配一个非数字字符。等价于 [^0-9]。

      \f 匹配一个换页符。等价于 \x0c 和 \cL。

       \n 匹配一个换行符。等价于 \x0a 和 \cJ。

      \r 匹配一个回车符。等价于 \x0d 和 \cM。

      \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

      \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

      \t 匹配一个制表符。等价于 \x09 和 \cI。

      \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

      \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

       \W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。

       \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

       \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

      \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

      \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

      如何在代码当中使用正则表达式:

      view plaincopy to clipboardprint?
      private var pattern:RegExp=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;  
      trace(pattern.test("rsdfj"));

       

      不带任何模糊验证 如:192.168.1.114 :

      [Bindable]
      public var ip2:RegExp =/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;

      利用RegExp 类的exec方法:返回值是Object类型

      var obj:Object = ip2.exec(str);

      str是要验证的字符串!!!

       

      方式2 可验证带*的模糊字段 如:192.168.*.114
      [Bindable]
      public var ip1:RegExp =/^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|(

      • ))\.((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|([*]))\.((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|([*]))\.((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|([*]))$/;

        正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里收集了一些常用的正则表达式语句,大家用到的时候就不用自己写了

         ^\d+$  //匹配非负整数(正整数 + 0)

        ^[0-9]*[1-9][0-9]*$  //匹配正整数

        ^((-\d+)|(0+))$  //匹配非正整数(负整数 + 0)

        ^-[0-9]*[1-9][0-9]*$  //匹配负整数

        ^-?\d+$    //匹配整数

        ^\d+(\.\d+)?$  //匹配非负浮点数(正浮点数 + 0)

        ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$  //匹配正浮点数

        ^((-\d+(\.\d+)?)|(0+(\.0+)?))$  //匹配非正浮点数(负浮点数 + 0)

        ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$  //匹配负浮点数

        ^(-?\d+)(\.\d+)?$  //匹配浮点数

        ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串

        ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串

        ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串

        ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串

        ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

        ^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$    //匹配email地址

        ^[a-zA-z]+://匹配(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ 

        ^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$  //匹配ip 

        //匹配url 匹配中文字符的正则表达式: [\u4e00-\u9fa5]

        匹配双字节字符(包括汉字在内):[^\x00-\xff]

        匹配空行的正则表达式:\n[\s| ]*\r

        匹配HTML标记的正则表达式:/<(.*)>.*<\/>|<(.*) \/>/

        匹配首尾空格的正则表达式:(^\s*)|(\s*$)

        匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

        匹配网址URL的正则表达式:^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$

        匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$

        匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?

        匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$

        下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

        \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

        ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。

        $ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。

        * 匹配前面的子表达式零次或多次。 + 匹配前面的子表达式一次或多次。+ 等价于 {1,}。

        ? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 {n} n 是一个非负整数,匹配确定的n 次。

        {n,} n 是一个非负整数,至少匹配n 次。 {n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。

        ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。

         . 匹配除 “\n” 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式。

         (pattern) 匹配pattern 并获取这一匹配。

         (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。 (?=pattern) 正向预查,在任何匹配 pattern 的字 即ζヅ洳檎易址 U馐且桓龇腔袢∑ヅ洌 簿褪撬担 闷ヅ洳恍枰 袢」┮院笫褂谩? (?!pattern) 负向预查,与(?=pattern)作用相反 x|y 匹配 x 或 y。

         [xyz] 字符集合。 [^xyz] 负值字符集合。

         [a-z] 字符范围,匹配指定范围内的任意字符。

         [^a-z] 负值字符范围,匹配任何不在指定范围内的任意字符。

         \b 匹配一个单词边界,也就是指单词和空格间的位置。

        \B 匹配非单词边界。

        \cx 匹配由x指明的控制字符。

         \d 匹配一个数字字符。等价于 [0-9]。

        \D 匹配一个非数字字符。等价于 [^0-9]。

        \f 匹配一个换页符。等价于 \x0c 和 \cL。

         \n 匹配一个换行符。等价于 \x0a 和 \cJ。

        \r 匹配一个回车符。等价于 \x0d 和 \cM。

        \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

        \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。

        \t 匹配一个制表符。等价于 \x09 和 \cI。

        \v 匹配一个垂直制表符。等价于 \x0b 和 \cK。

        \w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。

         \W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。

         \xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

         \num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。

        \n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

        \nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。

        如何在代码当中使用正则表达式:

        view plaincopy to clipboardprint?
        private var pattern:RegExp=/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;  
        trace(pattern.test("rsdfj"));


        不带任何模糊验证 如:192.168.1.114 :

        [Bindable]
        public var ip2:RegExp =/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;

        利用RegExp 类的exec方法:返回值是Object类型

        var obj:Object = ip2.exec(str);

        str是要验证的字符串!!!

         

        方式2 可验证带*的模糊字段 如:192.168.*.114
        [Bindable]
        public var ip1:RegExp =/^((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|(

        • ))\.((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|([*]))\.((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|([*]))\.((\d{1,2}|1\d\d|2[0-4]\d|25[0-5])|([*]))$/;

       

      本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoxin888888/archive/2009/07/11/4339759.aspx

       

      转载于:https://www.cnblogs.com/sunrunzhi/p/3303361.html

      展开全文
    • 正则表达式扫描的优先级 1. 先根据空格,tab,回车分割字符串,作为正则表达式匹配的基础 2. 找到完全匹配的正则表达式,以排列在前面的优先级为高 3. 如果找不到匹配的表达式,那么从头开始截取字符串来查找合适...

          正则表达式扫描的优先级
          1. 先根据空格,tab,回车分割字符串,作为正则表达式匹配的基础
          2. 找到完全匹配的正则表达式,以排列在前面的优先级为高
          3. 如果找不到匹配的表达式,那么从头开始截取字符串来查找合适的正则表达式
          例子:
          2000meter
          如果有以下两个正则表达式:2000meter会匹配2号正则表达式,因为2号完全匹配。
          1. ([0-9])+|([0-9]+\.[0-9]+)
          2. [A-Za-z0-9_]+
          如果有以下两个正则表达式:2000meter因为没有完全匹配的正则表达式,
          那么会截取为2000和meter两个字符串,2000会匹配1号正则表达式。
          1. ([0-9])+|([0-9]+\.[0-9]+)
          2. (_|[A-Za-z])[A-Za-z0-9_]+

      展开全文
    • 本文和大家重点讨论一下Flex正则表达式的学习,Flex正则表达式(regularexpression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。 Flex正则表达式学习 一般来说各个开发...
    • flex 正则表达式

      2009-02-04 12:48:43
      //其他正则表达式: "^\\d+$" //非负整数(正整数 + 0) "^[0-9]*[1-9][0-9]*$" //正整数 "^((-\\d+)|(0+))$" //非正整数(负整数 + 0) "^-[0-9]*[1-9][0-9]*$" //负整数 "^-?\\d+$" //整数 "^\\d+...
    • 本框值的length取出的是字符个数,并不是字节长度,如果含有中文或者全角字符,一个字符是2个字节,下面与大家分享下具体的判断方法,感兴趣的朋友可以参考下哈
    • Flex正则表达式规则

      2012-05-31 15:35:31
      [color=darkblue][size=medium]1.Flex正则表达式规则 1.1普通字符 字母、数字、汉字、下划线、以及后边章节中没有特殊定义的标点符号,都是"普通字符"。表达式中的普通字符,在匹配一个字符串的时候...
    • Flex 正则表达式整理

      2014-04-18 14:09:51
      先看一些常用的正则表达式写法 正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里收集了一些常用的正则表达式语句,大家用到的时候就不用自己写了 ^\d+$ //匹配非负整数(正整数 +...
    • RegExp 类允许使用正则表达式(即可用于在字符串中执行搜索和替换文本的模式)。 可以使用new RegExp()构造函数或将 RegExp 文本分配给一个变量,从而创建新的 RegExp 对象: var pattern1:RegExp = new RegExp(...
    • FLEX正则表达式语法

      2009-12-29 17:28:00
      * 匹配前面正则表达式的零次或多次出现。+ 匹配前面正则表达式的一次或多次出现。? 匹配前面正则表达式的零次或多次出现。{}根据括号内的不同而不同。单个数字{n}意味着前面的模式重复n次,如
    • flex正则表达式语法

      2009-09-22 13:28:00
      * 匹配前面正则表达式的零次或多次出现。 + 匹配前面正则表达式的一次或多次出现。 ? 匹配前面正则表达式的零次或多次出现。 {} 根据括号内的不同而不同。单个数字{n}意味着前面的模式重复n次,如:[A-Z]
    • flex正则表达式+语法

      2012-12-21 14:46:00
      正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里收集了一些常用的正则表达式语句,大家用到的时候就不用自己写了 ^/d+$ //匹配非负整数(正整数 + 0) ^[0-9]*[1-9][0-9]*$ //...
    • flex 正则表达式语法

      2009-02-12 18:23:02
      . 匹配除换行符"...* 匹配前面正则表达式的零次或多次出现。 + 匹配前面正则表达式的一次或多次出现。 ? 匹配前面正则表达式的零次或多次出现。 {} 根据括号内的不同而不同。单个数字{n}意味着前...
    •  正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和 任意个 'b' ”,那么 'ab', 'abb', '...
    • 正则表达式是一种通用的标准,大部分计算机语言都支持正则表达式,包括as3,这里收集了一些常用的正则表达式语句,大家用到的时候就不用自己写了^\d+$ //匹配非负整数(正整数 + 0)^[0-9]*[1-9][0-9]*$ //匹配正...

    空空如也

    空空如也

    1 2 3 4 5 ... 20
    收藏数 5,752
    精华内容 2,300
    关键字:

    flex正则表达式