文档章节

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

Oscarfff
 Oscarfff
发布于 2016/02/01 11:41
字数 597
阅读 129
收藏 2
点赞 1
评论 0

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
粉丝 71
博文 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
正则表达式及其范例

一、前言部分 控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打,送进内存的是\ java字符串中的特殊字符只有转义字符 和表示边界的字符 " 转义字符的作用是:(1)将边界符...

jiler
2015/12/27
99
0
那些年我用awk时踩过的坑——awk使用注意事项

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

kuSorZ
03/26
0
0
正则表达式中的子组模式

作者:西瓜玩偶(racnil070512 at hotmail dot com) 一、基础知识 在PCRE正则表达式中,我们可以利用圆括号定义一个子组,我们可以使用pregmatch函数(其他函数的信息请参考PHP官方API文档)...

snowing1990
2016/03/14
51
0
正则表达式语法

了解正则表达式语法: 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 列出...

妙曼
2017/02/22
0
0
vim的替换一小记

很多时候我用vim只是用来编辑,并不用来coding(PHP除外),听起来有点蛋疼,不过说真心话,就算是这样,还是舍不得放弃,不知道为什么,就是喜欢vim的风格,现在无论换什么系统,vi是必装软...

bigTreee
2016/01/25
111
2
grep 正则表达式 匹配url

★ grep中匹配url的正则表达式 在cygwin下测试通过。 参数说明: ★ Basic vs Extended Regular Expressions 基本的正则表达式(简称BRE) 和 扩展的正则表达式(简称ERE) 的区别: BRE中,...

u013553529
05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 配置时间和日期格式

你可以修改你 Confluence 为用户显示的时期和时间格式。设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置日期和时间格式。 有下面 3 个时间和日...

honeymose
6分钟前
0
0
php seralize unserialize

关于PHP 序列化(serialize)和反序列化(unserialize)出现错误(Error at offset)的解决办法。 首先我们分析一下为什么会出现这个错误: 编码问题 UTF-8: ANSI: 我发现在我的机器上边编码改...

yeahlife
13分钟前
0
0
七、JSP九大内置对象和四个作用域

九大内置对象: request:类型是HttpServletRequest,和Servlet里的HttpServletRequest一模一样。 response:类型是HttpServletResponse,和Servlet里的HttpServletResponse一模一样。JSP里基...

Wakeeee_
16分钟前
0
0
第十四章NFS服务搭建与配置

14.1 NFS介绍 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netap...

Linux学习笔记
48分钟前
0
0
双向认证-nginx

1、设置容器 docker run -it --name nginx-test2 -v /home/nginx:/apps -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -p 8183:80 -p 7443:443 -d nginx:stable 2、修改nginx配......

hotsmile
49分钟前
0
0
深入了解 Java 自动内存管理机制及性能优化

一图带你看完本文 一、运行时数据区域 首先来看看Java虚拟机所管理的内存包括哪些区域,就像我们要了解一个房子,我们得先知道这个房子大体构造。根据《Java虚拟机规范(Java SE 7 版)》的规...

Java大蜗牛
51分钟前
4
0
SpringBoot | 第六章:常用注解介绍及简单使用

前言 之前几个章节,大部分都是算介绍springboot的一些外围配置,比如日志 配置等。这章节开始,开始总结一些关于springboot的综合开发的知识点。由于SpringBoot本身是基于Spring和SpringMvc...

oKong
51分钟前
9
0
云数据库架构演进与实践

如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求。 微服务,也就是一种面向服务的,有特定边界的松...

巨杉数据库
53分钟前
0
0
Linux系统梳理---系统搭建(一):jdk卸载与安装

1.去官网下载符合Linux版本的jdk,暂用jdk-8u171-linux-x64.rpm 2.登陆Linux,进入usr目录,创建java目录(方便管理,可以其他位置):mkdir java 3.上传下载的jdk包至Linux服务器,使用rz指令(sz f...

勤奋的蚂蚁
今天
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

六库科技
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部