文档章节

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

Oscarfff
 Oscarfff
发布于 2016/02/01 11:41
字数 597
阅读 332
收藏 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

共有 人打赏支持
上一篇: XPI与XCI
Oscarfff
粉丝 73
博文 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
2018/03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
7
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
2
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部