这两天有点空,但是也不能这么闲着啊。所以就翻了翻
<<精通正则表达式>>
一书。
发现了很多自己不了解的东西(汗颜阿,自己知道的东西太少了!)。其中"|"就是其中一个。不懂就补吧,所以就有了下面的一点记录。
“|
”
他的意思就是
“或
”
。
用他我们可以把不同的
子表达式
合成一个总表达式,而这个总的表达式可以匹配
任意一个
的子表达式。我觉得下面有几个名称需要解释一下。
子表达式
表达式中被
“|
”
分格开的部分。如图
中的
“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
分享到:
相关推荐
正则表达式,简称为正则,是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换。在计算机科学和编程领域,正则表达式是处理文本的基础,广泛应用于数据验证、搜索、替换和提取等多种场景。下面将详细...
10.1_初识正则表达式|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
10.3_字符集|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
- 根据提供的文件名"正则表达式支持库200版静态版RegExfnE"推测,这可能是正则表达式支持库的一个版本,可能是静态编译版,便于集成到不同的项目中,无需动态链接库依赖。 6. **使用与集成** - 集成Deelx版正则...
10.19_小谈JSON、JSON对象与JSON字符串|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战
在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则表达式功能。PowerBuilder是一款基于对象的快速应用程序开发工具,尤其适合于数据库应用系统的开发。 标题"PB实现的正则表达式"表明...
`, `{}`, `[]`, `\`, `^`, `$`等,它们具有特殊含义,在正则表达式中用来定义模式。 - 字符类:例如`[abc]`,匹配其中任意一个字符。 - 量词:`*`, `+`, `?`, `{n}`, `{n,}` 和 `{n,m}`,分别表示零个或多个、一个...
在VB.NET中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员通过模式匹配来处理字符串。这个“vb正则表达式实例”很可能是为了帮助开发者测试和理解正则表达式的工作原理而设计的一个应用...
标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...
2. **早期应用**:20世纪60年代,正则表达式被应用于早期的文本编辑器中,如QED和EDT。 3. **现代发展**:随着Unix系统的普及,正则表达式成为许多Unix工具的基础,如grep、sed和awk等。 4. **广泛使用**:20世纪90...
在正则表达式中,元字符表示在正则表达式中不代表其字面含义,而是具有特别意义的字符。例如句点(.)、中括号字符([])、反斜线(\)等都是元字符。为了使用元字符的字面意思,需要进行转义,例如使用反斜线(\)...
10.15_一些关于学习正则的建议|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索。在C#编程语言中,正则表达式被广泛应用于数据验证、文本提取、格式转换等多个场景。本项目提供了一个C#编写的正则表达式测试工具,包含完整...
在标准C++库中,虽然没有内置的正则表达式支持,但通过包含如 Boost 或 TR1(Technical Report 1)扩展,或者在较新的C++11及更高版本中使用库,开发者可以实现正则表达式功能。然而,对于MFC开发者来说,使用MFC内...
在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...
10.11_re.sub正则替换|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
Java中提供了对正则表达式的支持,使得开发者可以使用正则表达式来匹配和提取字符串中的内容。 二、XML节点内容提取方法 在Java中,可以使用正则表达式来提取XML节点内容。下面是一个简单的示例: ```java public ...
在易语言中,正则表达式是进行文本处理、数据提取和搜索的关键工具,尤其在处理中文字符时显得尤为重要。本文将深入探讨易语言中的正则表达式匹配中文的原理、方法以及应用。 正则表达式(Regular Expression)是一...
10.9_组|正则表达式与JSON|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
### 正则表达式的深入浅出解析 #### 一、正则表达式的概念与起源 正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,它能够帮助我们在大量的文本数据中查找符合特定模式的字符串。...