文档章节

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

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

没有更多内容

加载失败,请刷新页面

加载更多

使用node打造自己的命令行工具方法教程

这篇文章主要介绍了使用node打造自己的命令行工具方法教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 一、实现一个简单的功能 image 二、环境 1.系统:...

嫣然丫丫丫
16分钟前
1
0
18-《深度拆解JVM》之即时编译(下)

今天,让我们来继续探讨 Java 虚拟机中的即时编译。 一、Profiling 上篇提到,分层编译中的 0 层、2 层和 3 层都会进行 profiling,收集能够反映程序执行状态的数据。其中,最为基础的便是方...

飞鱼说编程
20分钟前
1
0
短视频App开发:短视频爆发式增长

短视频领域依旧热闹非凡,众多巨头纷纷布局短视频领域,推动市场格局的新变化。迹象显示,行业企业正纷纷瞄准AI(人工智能)及5G契机进行布局,力图获得下一步发展优势。 短视频市场火爆 竞争...

ThinkSNS账号
40分钟前
1
0
图形用户界面和交互输入方法---交互式构图技术

基本的定位方法 拖拽 约束 网格 橡皮条方法 引力场 交互式绘画方法 虚拟现实环境

中国龙-扬科
48分钟前
2
0
Win10:键盘任一键实现了 “一键开机”

微软自 Windows 10 系统起,默认自己的系统都开始支持“快速开启”。实质上就是“快速开机”的功能。 此功能的特点是:对于装载了 Windows 10 的电脑,开机时,只需要轻轻按一下键盘上的任意...

LivingInFHL
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部