Flex正则表达式高级规则中预搜索和反向预搜索用法指导

开发 后端
本文向大家介绍一下Flex正则表达式的高级规则中预搜索和反向预搜索的概念,Flex正则表达式就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。

上节我们介绍了Flex正则表达式的简单规则,本文向大家介绍一下Flex正则表达式高级规则中预搜索和反向预搜索,首先我们来看一下Flex正则表达式的概念和作用。

引言

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

Flex正则表达式可以用来:

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

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

预搜索,不匹配;反向预搜索,不匹配

前面的章节中,我讲到了几个代表抽象意义的特殊符号:"^","$","\b"。它们都有一个共同点,那就是:它们本身不匹配任何字符,只是对"字符串的两头"或者"字符之间的缝隙"附加了一个条件。理解到这个概念以后,本节将继续介绍另外一种对"两头"或者"缝隙"附加条件的,更加灵活的表示方法。

Flex正则表达式正向预搜索:"(?=xxxxx)","(?!xxxxx)"

格式:"(?=xxxxx)",在被匹配的字符串中,它对所处的"缝隙"或者"两头"附加的条件是:所在缝隙的右侧,必须能够匹配上xxxxx这部分的表达式。因为它只是在此作为这个缝隙上附加的条件,所以它并不影响后边的表达式去真正匹配这个缝隙之后的字符。这就类似"\b",本身不匹配任何字符。"\b"只是将所在缝隙之前、之后的字符取来进行了一下判断,不会影响后边的表达式来真正的匹配。

举例1:表达式"Windows(?=NT|XP)"在匹配"Windows98,WindowsNT,Windows2000"时,将只匹配"WindowsNT"中的"Windows",其他的"Windows"字样则不被匹配。

举例2:表达式"(\w)((?=\1\1\1)(\1))+"在匹配字符串"aaaffffff999999999"时,将可以匹配6个"f"的前4个,可以匹配9个"9"的前7个。这个表达式可以读解成:重复4次以上的字母数字,则匹配其剩下最后2位之前的部分。当然,这个表达式可以不这样写,在此的目的是作为演示之用。

格式:"(?!xxxxx)",所在缝隙的右侧,必须不能匹配xxxxx这部分表达式。

举例3:表达式"((?!\bstop\b).)+"在匹配"fdjkaljfdlstopfjdslafdj"时,将从头一直匹配到"stop"之前的位置,如果字符串中没有"stop",则匹配整个字符串。

举例4:表达式"do(?!\w)"在匹配字符串"done,do,dog"时,只能匹配"do"。在本条举例中,"do"后边使用"(?!\w)"和使用"\b"效果是一样的。

Flex正则表达式反向预搜索:"(?<=xxxxx)","(?<!xxxxx)"

这两种格式的概念和正向预搜索是类似的,反向预搜索要求的条件是:所在缝隙的"左侧",两种格式分别要求必须能够匹配和必须不能够匹配指定表达式,而不是去判断右侧。与"正向预搜索"一样的是:它们都是对所在缝隙的一种附加条件,本身都不匹配任何字符。

举例5:表达式"(?<=\d{4})\d+(?=\d{4})"在匹配"1234567890123456"时,将匹配除了前4个数字和后4个数字之外的中间8个数字。由于JScript.RegExp不支持反向预搜索,因此,本条举例不能够进行演示。很多其他的引擎可以支持反向预搜索,比如:Java1.4以上的java.util.regex包,.NET中System.Text.RegularExpressions命名空间,以及本站推荐的最简单易用的DEELX正则引擎。
 

【编辑推荐】

  1. Flex正则表达式的高级规则
  2. FlexBuilder4十大新特性闪亮登场
  3. 解析AS3中Flex正则表达式的使用
  4. 揭开Flex正则表达式的神秘面纱
  5. FlexBuilder开发方法及特点解析 

 

 

责任编辑:佚名 来源: regexlab.com
相关推荐

2009-08-20 13:57:27

C#正则表达式

2010-08-09 14:14:13

Flex正则表达式

2010-08-09 14:43:25

Flex正则表达式

2010-08-13 15:23:10

Flex正则表达式

2010-08-09 13:58:59

Flex正则表达式

2010-08-09 14:30:39

Flex正则表达式

2010-08-12 10:35:06

Flex正则表达式

2010-08-13 15:31:11

Flex正则表达式

2010-07-28 11:06:41

Flex正则表达式

2010-08-09 14:07:04

Flex正则表达式

2010-07-19 10:40:16

Perl正则表达式

2010-08-09 13:51:27

Flex正则表达式

2010-07-14 09:37:46

Perl正则表达式

2018-09-27 15:25:08

正则表达式前端

2009-08-20 14:31:55

C#正则表达式字符串

2010-07-09 09:11:33

Ruby正则表达式

2010-07-28 11:01:07

Flex正则表达式

2010-07-28 11:12:19

Flex正则表达式

2016-12-05 17:03:59

用法正则表达式

2009-12-02 15:06:41

正则表达式
点赞
收藏

51CTO技术栈公众号