`
luliangok
  • 浏览: 816407 次
文章分类
社区版块
存档分类
最新评论

正则习点 --- 02

 
阅读更多

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次或者多次。


分享到:
评论

相关推荐

    linux系统shell正则表达式-练习工具和教材

    在IT领域,Linux系统Shell和正则表达式是两个至关重要的工具,它们在日常的系统管理、数据分析和脚本编写中发挥着巨大的作用。本文将深入探讨Linux Shell下的正则表达式,包括其基本概念、元字符、模式匹配以及常用...

    正则表达式 到 NFA

    这是编译原理的一个实验, 是把一个正则表达式转化为不确定有穷自动机NFA的算法程序,朋兴趣的朋友可以下载来看看哦. 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式...

    吴恩达深度学习课后习题 1-3 章

    正则化是防止过拟合的有效手段,L1和L2正则化、Dropout等技术可能会出现在习题中。优化算法部分,除了基本的梯度下降,还可能涉及动量法、Adam等更高级的优化策略,理解它们的工作原理和应用场景。 三、机器学习...

    各类正则表达式详细手册

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。在IT行业中,正则表达式被广泛应用于数据验证、文本搜索、日志分析等多个领域。本详细手册涵盖了ORACLE+PLSQL、JavaScript以及C#三种...

    《编译原理》清华第二版习题答案-清华版.rar )

    1. **正则表达式和有限状态自动机**:在词法分析中,正则表达式用于定义语言的字符模式,有限状态自动机(如NFA和DFA)则是实现词法分析的工具。 2. **上下文无关文法**:这是语法分析的基础,BNF(巴科斯范式)被...

    编译原理习题课--期末复习

    以下是对这些知识点的详细解释: 1. **编译过程**:编译过程分为多个阶段,首先,词法分析器将源代码分解成一个个称为“单词符号”的单元,接着,语法分析器根据语法规则解析这些单词符号,构建语法树。然后,中间...

    Python程序设计习题答案-(5).docx

    方法二是利用正则表达式库`re`的`sub()`函数,通过正则表达式`\bT`匹配单词边界后的"T",然后用`t`替换,确保只替换独立的"T",不替换单词内部的"T"。 4. 正则表达式:正则表达式是一种特殊的字符串序列,用于匹配...

    正则表达式规则及常用正则表达式列举

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。它通过一系列特定的字符、符号和操作符来定义一个模式,以此来检查字符串是否符合这个...

    习题07-Shell编程.doc

    12. `grep`命令的-E选项:用于启用扩展正则表达式,`grep -E '[Hh]enr(y|ietta)' file`会在`file`中查找匹配Henry、henry、Henrietta或henrietta的行。 13. `shift`命令的使用:在给定的程序中,`shift`命令用于...

    2017习题课-张昱1

    在homework 2中,很多人未能清晰展示状态机和回滚机制,而homework 3-1&2的2.4(c)部分,需要理解和处理C风格块注释的正规式,注意其中合法和非法的情况,并可以利用在线正则表达式测试工具进行验证。 在homework 4-...

    应用回归分析-第6章课后习题答案-2.doc

    在回归分析中,多重共线性是一个常见的问题,它指的是模型中的自变量...处理多重共线性通常涉及变量选择、正则化技术或者变换数据的方法。在实际应用中,应尽可能减少自变量之间的相关性,确保模型的可靠性和有效性。

    Coursera-机器学习-吴恩达-课后习题答案-编程练习全部答案(ex1-ex8)

    学习者将实现Sigmoid函数,理解最大似然估计,并应用正则化的逻辑回归进行模型选择。 ex3则进入了神经网络的基础,包括感知机模型和多层前馈网络。学生会学习如何初始化权重,前向传播,反向传播以计算梯度,以及...

    Python程序设计课后习题答案-第一单元.docx

    Python中常用的函数模块包括:`os`(操作系统接口)、`sys`(系统相关)、`datetime`(日期和时间处理)、`re`(正则表达式)、`json`(JSON数据格式处理)等。 Python的特色包括简洁的语法、强大的标准库、丰富的...

    习题07-Shell编程.pdf

    12. **grep命令的使用**:`grep -E`选项支持正则表达式,示例中的命令会在文件`file`中查找包含`Henry`、`henry`、`Henrietta`或`henrietta`的行。 13. **脚本执行结果分析**:给出的`prog`脚本会根据传入的参数...

    《Java2程序设计实用教程(第2版)》习题及实验(叶核亚)

    2. **习题02 - Java语言基础** 在这一章,习题涵盖了变量、数据类型、运算符、流程控制语句(如if-else、switch、for、while)等基础知识。通过实践,学生将深入理解Java的强类型特性,以及如何使用不同的控制结构...

    Python-Flask

    basics - Bin-block 全局解释器锁练习源码 - Bin-Coroutine 协程练习源码 + Coroutine 协程练习源码 + greenlet 模块 - Bin-Thread 线程练习源码 - Bin-Multiprocessing 多进程练习 - Bin-Re 正则表达式练习 ...

    第三章_词法分析_习题讲解_(编译原理)

    本资源摘要信息是关于词法分析的知识点,主要讲解了正则文法、正则式和自动机之间的相互转化。 词法分析是编译原理中的一部分,用于分析代码中的词法结构。词法分析器将源代码分割成单个的词法单元,如关键字、...

    神经网络与深度学习-课后习题答案

    在神经网络和深度学习的学习过程中,理解...总的来说,这些习题涵盖了神经网络和深度学习中的核心概念,如正则化、激活函数的选择、参数计算、反向传播以及梯度消失问题,这些都是理解和优化神经网络模型的关键知识点。

    离散数学--高教版--课后答案

    在离散数学的学习中,以下几个核心知识点至关重要: 1. **集合论**:集合是离散数学的基本概念,涉及到集合的定义、性质、子集、并集、交集、差集以及笛卡尔积等。理解集合论有助于构建数学思维的基础。 2. **逻辑...

Global site tag (gtag.js) - Google Analytics