这两天有点空,但是也不能这么闲着啊。所以就翻了翻
<<精通正则表达式>>
一书。
发现了很多自己不了解的东西(汗颜阿,自己知道的东西太少了!)。其中"|"就是其中一个。不懂就补吧,所以就有了下面的一点记录。
“|
”
他的意思就是
“或
”
。
用他我们可以把不同的
子表达式
合成一个总表达式,而这个总的表达式可以匹配
任意一个
的子表达式。我觉得下面有几个名称需要解释一下。
子表达式
表达式中被
“|
”
分格开的部分。如图
中的
“Back
”
、
“Go
”
和
“Do
”
就分别是一个子表达式。(这里对子表达方式的定义只是适用于多选结构)
任意一个
表示该表达式可以匹配上例中的
“Back
”
、
“Go
”
或
“Do
”
中的任何但是
只能是一个
。
也就是说他不能匹配
“BackDo
”
或
“GoDo
”
这样的字符串。
下面我们就举几个例子来说明他的用法。
“Jettery|Jettrey
”
和
“Jett(er|re)y
”
看看
“Jettery|Jettrey
”
和
“Jett(er|re)y
”
之间有什么区别。他们匹配的结果是否相同?
如果从匹配结果来看的话他们是等价的。都能够匹配“Jettery”或“Jettrey”。但是过程确实不一样的。在
“Jettery|Jettrey
”
中我们可以很容易的区分出子表达式分别是
“Jettery
”
和
“Jettrey
”
。但是在
“Jett(er|re)y
”
中就不是这个样子了。他的子表达式分别是
“er
”
和
“re
”
,为什么他们的子表达式是
“er
”
和
“re
”
而不是
“Jett(er
”
和
“re)y
”
呢?上面不是说子表达式是被
“|
”
分隔开的部分吗。在这个表达式中
“Jett(er
”
和
“er)y
”
的确是被
“|
”
分隔开的两个部分啊?。对这个没有错,但是因为
“()
”
的存在改变了
“|
”
的作用范围。那么在这个表达式中
“|
”
的作用范围就只是
“(erre)
”
了。在这个范围中就符合我们上面对于子表达式的定义了。我们可以通过下面这两个图来证明这一点。
|
Note
“(...)
”元字符可以改变“|
”元字符的作用范围。
|
“From|Subject|Data:.*
”和“(From|Subject|Data):.*
”
这两个表达式一样吗?如果不一样,他们的区别在什么地方呢?事实上这两个表达式有着很大的差别。这一点从匹配的结果就可以看出来。
例如第一个表达式能够匹配“Data: Mon ,23 Oct
”,但是却不能匹配“From: JetGeng@hotmail.com
”。
但是第二个却可以。问题处在那里呢。还是“(...)
”改变了"|"的作用范围。
在正则表达式中使用“|
”元字符的时候一点先要确定“|
”的作用范围,
根据这个作用范围判断出被分成的子表达式。这样就可以确保“|
”能够返回给你你需要的东西。
|
Note
如果使用NFA引擎类型的正则表达式驱动,注意分支不宜太多,否则会引起性能问题。具体的原因可能的话再另外再写。
|
- 大小: 5.6 KB
- 大小: 56.7 KB
- 大小: 64.7 KB
分享到:
相关推荐
正则表达式.rar || 正则表达式.rar
10.1_初识正则表达式|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
10.3_字符集|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
10.15_一些关于学习正则的建议|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache...
10.11_re.sub正则替换|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
正则表达式,正则表达式,正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式 正则表达式
深入浅出正则表达式深入浅出正则表达式深入浅出正则表达式
常用正则表达式 正则表达式 常用正则表达式 正则表达式
正则表达式由浅入深逐级深入正则表达式由浅入深逐级深入正则表达式由浅入深逐级深入正则表达式由浅入深逐级深入
书中贯穿了大量简洁明了的示例,旨在让读者轻松掌握正则表达式。此外,书中各在线和桌面工具一应俱全,并介绍了进阶参考资料,是一本不可多得的正则表达式入门好书。《学习正则表达式》适合对正则表达式感兴趣的...
正则表达式.rar正则表达式.rar正则表达式.rar正则表达式.rar
3、选择排除规则,一、按正则表达式把源码中符合正则的删除;二、按正则表达式把源码中符合正则的找出;三、符合正则表达式的显示True 4、选择是否不区分大小写(RegexOptions.IgnoreCase),单行模式...
正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式正则表达式...
《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。 此书为英文版,因为中文...
正则表达式日期校验 正则表达式日期校验 正则表达式日期校验
正则表达式正则表达式正则表达式正则表达式 验证程序
书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及...
Java正则表达式Java正则表达式Java正则表达式Java正则表达式
正则表达式帮助 有用的正则表达式帮助 有用的正则表达式帮助 有用的正则表达式帮助 有用的