文档章节

浅议正则表达式中的 “竖线(|)”

Oscarfff
 Oscarfff
发布于 2016/02/01 11:41
字数 597
阅读 204
收藏 2

1.  前言

这两天有点空,但是也不能这么闲着啊。所以就翻了翻 <<精通正则表达式>> 一书。 发现了很多自己不了解的东西(汗颜阿,自己知道的东西太少了!)。其中"|"就是其中一个。不懂就补吧,所以就有了下面的一点记录。

2. 用途

|” 他的意思就是 “或 ” 。 用他我们可以把不同的 子表达式 合成一个总表达式,而这个总的表达式可以匹配 任意一个 的子表达式。我觉得下面有几个名称需要解释一下。

  • 子表达式

  • 表达式中被 “| ” 分格开的部分。如图 中的 “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) ” 了。在这个范围中就符合我们上面对于子表达式的定义了。我们可以通过下面这两个图来证明这一点。

正则表达式在线调试工具

http://regexr.com/

详细说明:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions

 

本文转载自:http://jet-geng.iteye.com/blog/466621

共有 人打赏支持
Oscarfff
粉丝 72
博文 815
码字总数 96913
作品 0
崇明
后端工程师
shell之正则表达式

一 正则表达式 正则表达式:描述某些字符串匹配规则的工具 使用原因:程序设计过程中不可避免的遇到处理某些文本情况,有时候要查找符合某些比较复杂规则的字符串。正则表达式以非常简单的代...

tree2013
2016/12/13
1
0
java正则_$等特殊字符匹配

java正则表达式对某些特殊符号做了预定义,当要正则匹配这些特殊符号时,就需要转义。 示例:匹配美元符号与尖括号保卫的字符($<xxxx>) 附:特殊符号转义字符 点的转义:. ==> \u002E 美元符...

svili
2016/10/26
41
0
Python3正则表达式(Python3 Regular Expression)

引子 语法 注意事项 Python3正则工具 正则表达式是一种通用的工具,并不只属于Python语言,基本大部分语言都封装好了这个工具。 引子 正则表达式(Regular Expression)是一种用于做字符串匹...

qq_32690999
2017/12/05
0
0
如何使用正则表达式批量添加和删除字符?

注:由于简书不支持 gif,强烈建议至本篇文章的微信公众号链接如何使用正则表达式批量添加和删除字符查看带动图的步骤演示版。 Foreword 作为一枚 Technical Writer,在使用 Markdown 进行技...

Lilian_Lee
2017/11/09
0
0
那些年我用awk时踩过的坑——awk使用注意事项

原文出处:https://www.cnblogs.com/kingstarer/p/6059978.html 由于项目经历原因,经常使用awk处理一些文本数据。甚至,我特意下载了一个windows上的awk:gawk.exe,这样在windows上也能享受...

kuSorZ
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python中的base64加密和解密

python中的base64加密和解密 代码如下: import base64import jsondef row_data(): content = { "buyer_nick": "家有亲亲", "payment": "109.40", "status":......

_Change_
13分钟前
1
0
常见的几种单例模式

单例模式:是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。   对于系统中的某些类来说,只有一个实例很重要,...

rechardchensir
15分钟前
1
0
mongodb根据多个字段查询模糊查询某个值

MongoCollection<Document> collection = db.getCollection("test"); /*******************mongodb根据多个字段查询模糊查询某个值*******************/ //定义一个Basic......

开源中国封号找我
18分钟前
1
0
JSCH会大量使用服务器内存吗?会

java实现一个需求用到了jsch,发现服务器内存会被占满。 写了个50进程的jsch-sftp测试连接 put一个文件 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(50);for (int j =...

just-coding
34分钟前
1
0
聊聊redis的数据结构的应用

序 本文主要研究一下redis的数据结构的应用 string 最常用的就是incr操作,比如可以用来维护用户在某个抽奖活动的剩余抽奖次数 setnx方法可以用来实现分布式锁 hashmap 可以用来存储session...

go4it
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部