`

Flex正则表达式 学以致用 【总结版】

    博客分类:
  • Flex
阅读更多

 

1.1        开始、结束符号(它们同时也属于定位符)

我们先从简单的开始。假设你要写一个正则表达式规则,你会用到 ^ $ 符号,他们分别是行首符、行尾符。

例如: /^d+[0-9]?d+$/

1.2 句点符号

假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以 “t” 字母开头,以 “n” 字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符 —— 句点符号 “.” 。这样,完整的表达式就是 “t.n” ,它匹配 “tan” “ten” “tin” “ton” ,还匹配 “t#n” “tpn” 甚至 “t n” ,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、 Tab 字符甚至换行符:

1.3 方括号符号

为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号( “[]” )里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配 。也就是说,正则表达式 “t[aeio]n” 只匹配 “tan” “Ten” “tin” “ton” 。但 “Toon” 不匹配,因为在方括号之内你只能匹配单个字符:

1.4 “ 符号

如果除了上面匹配的所有单词之外,你还想要匹配 “toon” ,那么,你可以使用 “|” 操作符。 “|” 操作符的基本意义就是 运算 。要匹配 “toon” ,使用 “t(a|e|i|o|oo)n” 正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号 “()”

1.5 表示匹配次数的符号

表一:显示了表示匹配次数的符号,这些符号用来确定紧靠该符号左边的符号出现的次数:    代码 / 语法 说明
*
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次
{n}
重复 n
{n,}
重复 n 次或更多次
{n,m}
重复 n m

表二:常用符号

代码 / 语法 相当于
w [0-9A-Za-z_]
W [^0-9A-Za-z_]
s [tnrf]
S [^tnrf]
d [0-9]
D [^0-9]

表二中的符号意义:

·         w 包括下划线的字母和数字。等同于 [0-9A-Za-z_] 。若为匹配多字节字符的正则表达式时,则也会匹配日语的全角字符。

·         W 非字母和数字。 w 以外的单个字符。

·         s 空字符。相当于 [ tnrf]


·         S
非空字符。 [ tnrf] 以外的单个字符。


·         d
数字。即 [0-9]

·         D 非数字。 d 以外的单个字符

1.6 定位符介绍(用于规定匹配模式在目标对象中的出现位置)

较为常用的定位符包括: “^”, “$”, “b” 以及 “B” 。其中, “^” 定位符规定匹配模式必须出现在目标字符串的开头, “$” 定位符规定匹配模式必须出现在目标对象的结尾, b 定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而 “B” 定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把 “^” “$” 以及 “b” “B” 看作是互为逆运算的两组定位符。举例来说:
   /^hell/
  因为上述正则表达式中包含 “^” 定位符,所以可以与目标对象中以 “hell”, “hello” “hellhound” 开头的字符串相匹配。

/ar$/
  因为上述正则表达式中包含 “$” 定位符,所以可以与目标对象中以 “car”, “bar” “ar” 结尾的字符串相匹配。
   /bbom/
  因为上述正则表达式模式以 “b” 定位符开头,所以可以与目标对象中以 “bomb”, “bom” 开头的字符串相匹配。
   /manb/
  因为上述正则表达式模式以 “b” 定位符结尾,所以可以与目标对象中以 “human”, “woman” “man” 结尾的字符串相匹配。
  为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
   /[A-Z]/
  上述正则表达式将会与从 A Z 范围内任何一个大写字母相匹配。
   /[a-z]/
  上述正则表达式将会与从 a z 范围内任何一个小写字母相匹配。
   /[0-9]/
  上述正则表达式将会与从 0 9 范围内任何一个数字相匹配。
   /([a-z][A-Z][0-9])+/
  上述正则表达式将会与任何由字母和数字组成的字符串,如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。 “()” 符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如 “abc” 等的字符串匹配,因为 “abc” 中的最后一个字符为字母而非数字。
  如果我们希望在正则表达式中实现类似编程逻辑中的 运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|” 。例如:
   /to|too|2/
  上述正则表达式将会与目标对象中的 “to”, “too”, “2” 相匹配。
  正则表达式中还有一个较为常用的运算符,即否定符 “[^]” 。与我们前文所介绍的定位符 “^” 不同,否定符 “[^]” 规定目标对象中不能存在模式中所规定的字符串。例如:
   /[^A-C]/
  上述字符串将会与目标对象中除 A B ,和 C 之外的任何字符相匹配。一般来说,当 “^” 出现在 “[]” 内时就被视做否定运算符;而当 “^” 位于 “[]” 之外,或没有 “[]” 时,则应当被视做定位符。
  最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符 “” 。例如:
   /Th*/
  上述正则表达式将会与目标对象中的 “Th*” 而非 “The” 等相匹配。

三、正则表达式规则的例子

/^(d{3}-|d{4}-)?(d{8}|d{7})?$/    // 国内电话
/^[1-9]*[1-9][0-9]*$/    //
腾讯 QQ
/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/
     //email 地址
/^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$/
   //url
/^d+$/
    // 非负整数
/^[0-9]*[1-9][0-9]*$/
   // 正整数
/^((-\d+)|(0+))$/
   // 非正整数
/^-[0-9]*[1-9][0-9]*$/
   // 负整数
/^-?\d+$/
      // 整数
/^\d+(\.\d+)?$/
   // 非负浮点数
/^(([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-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 个英文字母或者下划线组成的字符串

 

 

下面总结一下基本的正则表达式的meta character以及它们含义:

.      匹配任意一个字符 

$     匹配一行的结尾 

^  匹配一行的开头(在[]里面表示否定)

{}    定义了一个范围 

[]    定义了一个字符类 

()    定义了一个组

*     前面出现0次以上

+    前面匹配一次以上 

?    前面出现0次或一次  

\  后面的字符不会看作metacharacter

\w   字母数字下划线 

\W  非字母数字下划线

\d   单个数字 

\D   单个非数字 

|      或,二者之一 

&&  与操作符

\b   单词边界

下面看看几个简单的例子:

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z&&[def]] d、e 或 f(交集)

[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)

[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

 

  • Eg1:

字符串中如何去除空格和换行,下面就是运用了正则表达式去除字符串中的空格和换行

 

var str : String = ” sds dsf\nsf “;

var rex : RegExp =/\s+/; //空格

var rex1 : RegExp = /\n+/; //换行

str = str.replace(rex,”");

str = str.replace(rex1,”");

  • Eg2:
2
3
分享到:
评论

相关推荐

    Flex 正则表达式大集

    ### Flex正则表达式大集解析 #### 一、数字匹配 **正则表达式**: ```regex ^\d+$ //匹配整数 ``` **解释**:此表达式用于匹配任何非空的整数(正数或负数)。`^`表示字符串的开始,`\d`代表任何数字字符(等同于`...

    Flex正则表达式判断中文或全角字符代码

    ### Flex正则表达式判断中文或全角字符代码 在Flex开发中,处理文本时经常需要考虑到字符编码的问题,特别是当涉及到中文或者其他全角字符时。由于这些字符通常占用两个字节,因此简单的通过字符串的`length`属性来...

    正则表达式转为NFA

    在实际应用中,可以使用类似lex或flex这样的工具进行正则表达式到NFA的转换。在给定的链接"http://blog.csdn.net/lileyear/article/details/7860596"中,作者lileyear讨论了他的自定义工具"blex",它可能是对flex...

    validate校验正则表达式验证

    总结来说,"validate校验正则表达式验证"涉及的是在编程中利用validate库或类似工具,结合正则表达式进行数据有效性检查。这种技术广泛应用于表单验证、输入过滤、数据清洗等多个场景,是提高程序健壮性和用户体验的...

    正则表达式+词法分析

    而词法分析生成器,如lex(或flex)和yacc(或bison)等工具,可以自动生成词法分析器代码,只需要提供正则表达式和相应的动作规则即可。 在实际应用中,正则表达式和词法分析经常结合使用,例如在文本处理工具(如...

    使用正则表达式匹配字符串数据PPT学习教案.pptx

    10. **在Flex 4.0中使用正则表达式**:在Flex中,可以使用`RegExp`类来创建和使用正则表达式。创建正则表达式的方式有两种:直接使用斜杠 `/` 包裹表达式,或者用字符串表示。匹配数据的方法包括`exec()`和`test()`...

    Actionscript3正则表达式的使用.pdf

    在AS3中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许开发者通过模式匹配来验证、查找、替换和提取文本。正则表达式由四个主要组成部分构成:元字符、元序列、标志和数量表达符。 1. **元...

    js 正则表达式

    同时,访问RIA藏经阁提供的资源,你将有机会了解JavaScript及相关的RIA技术,如Flash、Flex、Air和HTML5,这些都对深入理解JavaScript正则表达式大有裨益。 总之,JavaScript的正则表达式是开发者必备的技能之一,...

    PHP和javascript常用正则表达式及用法实例

    在计算机科学中,正则表达式用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在WEB开发中,正则表达式通常用来检测、查找替换某些符合规则的字符串,如检测用户输入E-mai格式是否正确,采集符合规则的...

    Python-flexicon一种用于Python轻量级基于正则表达式的词法分析器框架

    Python中的flexicon是一种轻量级、基于正则表达式的词法分析器框架,它为开发者提供了构建自己的词法分析器的工具。词法分析器,也称为扫描器或词法分析器,是编译器设计过程中的第一步,它将源代码分解成一系列有...

    正则表达式匹配解析过程探讨分析(正则表达式匹配原理)

    正则表达式是一种强大的文本匹配工具,它通过一系列特殊字符的组合来构建表达式,用以描述和匹配特定的字符串模式。正则表达式的强大之处在于它几乎可以匹配任何形式的文本,从简单的字母数字组合到复杂的字符串结构...

    zearch:Zearch 是一个正则表达式引擎,它接受输入正则表达式和基于语法的压缩文本,并返回包含正则表达式匹配项的未压缩文本的每一行

    压缩文本上的正则表达式搜索 它是什么? zarch是一个正则表达式引擎,它接受输入正则表达式和基于语法的压缩文本,并返回包含正则表达式匹配项的未压缩文本的每一行。 限制 跨行不匹配 不支持反转匹配选项 只有常规...

    正则表达式PPT学习教案.pptx

    【正则表达式】是计算机科学中用于匹配字符串或数据模式的一种强大工具,它在词法分析中扮演着至关重要的角色。词法分析是编译器设计中的一个关键步骤,其目的是将源代码分解成一系列有意义的单元,称为单词符号...

    正则表达式PPT课件.pptx

    正则表达式是编程语言中用于模式匹配和文本解析的重要工具,它在词法分析阶段起着关键作用。词法分析是编译器设计过程中的第一步,它的主要任务是将源代码分解成一系列有意义的单元,称为单词符号或token。 3.1 ...

    0513《编译原理》答案 设计并实现TINYC语言的扫描程序.doc

    在实现过程中,可能会使用诸如lex或flex这样的词法分析工具,它们能够自动生成符合给定正则表达式的扫描程序代码。此外,还需要编写实验报告,详细描述设计过程、遇到的问题以及解决方案,同时附带程序源代码、编译...

    orderless:以任意顺序匹配多个正则表达式的Emacs完成样式

    每个组件可以以几种方式中的任何一种进行匹配:从字面上看,作为正则表达式,作为首字母缩写,采用flex样式或作为多个单词前缀。 缺省情况下,启用regexp和initialism匹配。 完成样式是完成的后端,并从提供完成UI...

    PERL-FLEX.rar_flex_软件编译工具

    标题"PERL-FLEX.rar_flex_软件编译工具"表明了这是一个与PERL和flex相关的压缩文件,其中包含了用于编译的工具,特别是将PERL中的正则表达式转换为flex可以处理的形式。flex是一个开源的、高性能的词法分析器生成器...

    从lex,yacc到javacc

    在lex(以及后来的flex)中,正则表达式用于定义词法规则,帮助识别源代码中的不同元素。下面将深入探讨正则表达式的基本概念及其在lex中的使用。 1. **基本正则表达式运算符** - **字符匹配**:单个字符可以直接...

    flex2.5.33

    在UNIX系统中,Flex 2.5.33是一个经典的版本,它提供了高效的正则表达式匹配功能,用于识别编程语言、配置文件等文本格式的结构。Flex通常与Yacc(Yet Another Compiler-Compiler)结合使用,Yacc负责语法分析,Flex...

    egrep程序c++/bison/flex实现

    在`egrep`的上下文中,Flex会识别输入的正则表达式模式,并将其转换为内部可以处理的形式。 实现`egrep`的步骤大致如下: 1. **词法分析**:使用Flex定义正则表达式的词法规则,例如匹配各种字符、括号、星号等...

Global site tag (gtag.js) - Google Analytics