1.4.4 Alternation
1.4.4.1 Matching any one of several subexpressions
A very convenient metacharacter is 「|」,which means “or”.
能够匹配总的表达式中的任意一个的子表达式,在这样的组合中,子表达式称为”多选分支(alternative)”。
例如,
% egrep '^(From|Subject|Date): ' mailbox
From: elvis@tabloid.org (The King)
Subject: be seein' ya around
Date: Mon, 23 Oct 2006 11:04:13
From: The Prez <president@whitehouse.gov>
Date: Wed, 25 Oct 2006 8:36:24
Subject: now, about your vote...
.
.
.
1.4.5 Ignoring Differences in Capitalization
The email header example provide a goodopportunity to introduce the concept of a
case-insensitivematch.
在egrep参数中加”-i” 即可实现不区分大小写(case-insensitive)。
% egrep -i '^(From|Subject|Date): ' mailbox
1.4.6 Word Boundaries
单词分界符指的是:把某些特殊符号放到单词开头和结束的位置。
元字符序列(metasequences):「\<」、「\>」
相当于「^」和「$」
1.4.7 In a Nutshell
Table1-1. Summary of Metacharacters Seen So Far.
Metacharacter
|
Name
|
Matches
|
.
|
dot
|
any one character
|
[…]
|
character class
|
any character listed
|
[^…]
|
negated character class
|
any character not listed
|
^
|
caret
|
the position at the start of the line
|
$
|
dollar
|
the position at the end of the line
|
\<
|
backslash less-than
|
†the position at the start of a word
|
\>
|
|
†not supported by all versions of egrep
|
|
|
or; bar
|
Matches either expression it separates
|
(…)
|
parentheses
|
Used to limit scope of 「|」, plus additional uses yet to be discussed
|
需要注意几点:
l在字符组内部,元字符的定义规则(及它们的意义)是不一样的。例如,在字符组外部,点号(.)是元字符,但是在内部则不是如此。相反,连字符(-)只有在字符组内部(这是普通情况)才是元字符,否则就不是。脱字符(^)在字符组外部表示一个意思,在字符组内部紧接着[时表示另一个意思,其他情况下又表示别的意思。
l不要混淆多选项(Alternation)和字符组(Character classes)。字符组「[abc]」和多选项「(a|b|c)」固然表示同一个意思,但是这个例子中的相似性并不能推广开来。无论列出的字符有多少,字符组只能匹配一个字符。相反,多选项可以匹配任意长度的文本,每个多选项可能匹配的文本都是独立的,例如「\<(1000000|million|thousand·thou)\>」。不过,多选项没有字符组那样的排除功能。
l排除型字符组是表示所有未列出字符的字符组的简便方法。因此,「[^x]」的意思并不是“只有当这个位置不是x时才能匹配“,而是说”匹配一个不等于x的字符“。其中的差别很细微,但很重要。例如,前面的概念可以匹配一个空行,而「[^x]」则不行。
1.4.8 Optional Items
元字符「?」代表可选项(Optional Items)。
把它加在一个字符的后面,就表示此处容许(也可以不)出现这个字符。
1.4.9 Other Quantifiers: Repetition
问号、加号和星号,统称为量词(quantifiers)
问号(?)表示前一项出现1次或者0次。
加号(+)表示可以匹配前一项的1次或者多次。
星号(*)表示匹配前一项0次或者多次。
分享到:
相关推荐
在IT领域,Linux系统Shell和正则表达式是两个至关重要的工具,它们在日常的系统管理、数据分析和脚本编写中发挥着巨大的作用。本文将深入探讨Linux Shell下的正则表达式,包括其基本概念、元字符、模式匹配以及常用...
这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦. 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式...
正则化是防止过拟合的有效手段,L1和L2正则化、Dropout等技术可能会出现在习题中。优化算法部分,除了基本的梯度下降,还可能涉及动量法、Adam等更高级的优化策略,理解它们的工作原理和应用场景。 三、机器学习...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。在IT行业中,正则表达式被广泛应用于数据验证、文本搜索、日志分析等多个领域。本详细手册涵盖了ORACLE+PLSQL、JavaScript以及C#三种...
1. **正则表达式和有限状态自动机**:在词法分析中,正则表达式用于定义语言的字符模式,有限状态自动机(如NFA和DFA)则是实现词法分析的工具。 2. **上下文无关文法**:这是语法分析的基础,BNF(巴科斯范式)被...
以下是对这些知识点的详细解释: 1. **编译过程**:编译过程分为多个阶段,首先,词法分析器将源代码分解成一个个称为“单词符号”的单元,接着,语法分析器根据语法规则解析这些单词符号,构建语法树。然后,中间...
方法二是利用正则表达式库`re`的`sub()`函数,通过正则表达式`\bT`匹配单词边界后的"T",然后用`t`替换,确保只替换独立的"T",不替换单词内部的"T"。 4. 正则表达式:正则表达式是一种特殊的字符串序列,用于匹配...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一系列特定的字符、符号和操作符来定义一个模式,以此来检查字符串是否符合这个...
12. `grep`命令的-E选项:用于启用扩展正则表达式,`grep -E '[Hh]enr(y|ietta)' file`会在`file`中查找匹配Henry、henry、Henrietta或henrietta的行。 13. `shift`命令的使用:在给定的程序中,`shift`命令用于...
在homework 2中,很多人未能清晰展示状态机和回滚机制,而homework 3-1&2的2.4(c)部分,需要理解和处理C风格块注释的正规式,注意其中合法和非法的情况,并可以利用在线正则表达式测试工具进行验证。 在homework 4-...
在回归分析中,多重共线性是一个常见的问题,它指的是模型中的自变量...处理多重共线性通常涉及变量选择、正则化技术或者变换数据的方法。在实际应用中,应尽可能减少自变量之间的相关性,确保模型的可靠性和有效性。
学习者将实现Sigmoid函数,理解最大似然估计,并应用正则化的逻辑回归进行模型选择。 ex3则进入了神经网络的基础,包括感知机模型和多层前馈网络。学生会学习如何初始化权重,前向传播,反向传播以计算梯度,以及...
Python中常用的函数模块包括:`os`(操作系统接口)、`sys`(系统相关)、`datetime`(日期和时间处理)、`re`(正则表达式)、`json`(JSON数据格式处理)等。 Python的特色包括简洁的语法、强大的标准库、丰富的...
12. **grep命令的使用**:`grep -E`选项支持正则表达式,示例中的命令会在文件`file`中查找包含`Henry`、`henry`、`Henrietta`或`henrietta`的行。 13. **脚本执行结果分析**:给出的`prog`脚本会根据传入的参数...
2. **习题02 - Java语言基础** 在这一章,习题涵盖了变量、数据类型、运算符、流程控制语句(如if-else、switch、for、while)等基础知识。通过实践,学生将深入理解Java的强类型特性,以及如何使用不同的控制结构...
basics - Bin-block 全局解释器锁练习源码 - Bin-Coroutine 协程练习源码 + Coroutine 协程练习源码 + greenlet 模块 - Bin-Thread 线程练习源码 - Bin-Multiprocessing 多进程练习 - Bin-Re 正则表达式练习 ...
本资源摘要信息是关于词法分析的知识点,主要讲解了正则文法、正则式和自动机之间的相互转化。 词法分析是编译原理中的一部分,用于分析代码中的词法结构。词法分析器将源代码分割成单个的词法单元,如关键字、...
在神经网络和深度学习的学习过程中,理解...总的来说,这些习题涵盖了神经网络和深度学习中的核心概念,如正则化、激活函数的选择、参数计算、反向传播以及梯度消失问题,这些都是理解和优化神经网络模型的关键知识点。
在离散数学的学习中,以下几个核心知识点至关重要: 1. **集合论**:集合是离散数学的基本概念,涉及到集合的定义、性质、子集、并集、交集、差集以及笛卡尔积等。理解集合论有助于构建数学思维的基础。 2. **逻辑...