`
searun
  • 浏览: 177011 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

[跟我学正则表达式] 2. 匹配单个字符

阅读更多

在本章中,我们将学到如何对一个或者更多的字符执行简单的字符匹配。

 

匹配文本字符

Ben 就是一个正则表达式。因为这是一个普通的文本,所以看起来可能不像是正则表达式,但是事实上确实是。正则表达式可以包含普通的文本(甚至是只包含普通的文本)。无可否认,这是正则表达式处理的极大浪费,但是可能确实一个学习的起点。

下面是个例子:

文本
Hello, my name is Ben. Please visit
my website at http://www.forta.com/ .
正则表达式
Ben

结果

Hello, my name is Ben . Please visit
my website at http://www.forta.com/ .
分析

这里的正则表达式是文本常量,匹配了原始文档中的 Ben

让我们看看另外一个例子,使用了同样的文本和不同的正则表达式

文本
Hello, my name is Ben. Please visit
my website at http://www.forta.com/ .
正则表达式
my

结果

Hello, my name is Ben. Please visit
my website at http://www.forta.com/ .
分析

my 同样是静态文本,但是注意到这里匹配了两次。

 

有多少匹配?

大多少正则表达式引擎的默认行为仅仅是返回第一个匹配。在上面的例子中,第一个 my 将会被匹配,而不是第二个。但是为什么会有两个匹配呢?许多的正则表达式实现都提供了一个获取所有匹配的机制(通过一个数组或者特定的格式返回)。在 Javascript 中,可以通过一个额外的标志 g(global) 来获取所有的匹配。

参考附录 A :流行应用和语言中的正则表达式,学习如何在你的工具或者语言中执行全局查找。

 

处理大小写

正则表达式是大小写敏感的,所以 Ben 不会匹配 ben 。尽管如此,大部分的正则表达式实现都提供了一个选项是否使得匹配大小写不敏感。 Javascript 用户,可以通过指定 i 标志来使得搜索的时候是大小写不敏感的。

同样的参考附录 A 来看看你的语言和工具如何执行大小写不敏感的查找操作。

 

匹配任意字符

到现在为止正则表达式还只是能够匹配静态文本。这看起来真有点虎头蛇尾。下面我们看看如何匹配动态的字符。

在正则表达式之中,特殊的字符(有一组特殊字符)可以用来指示需要搜索的字符。“ . ”(句号)用来匹配任意字符。

如果你曾经使用过 DOS 的文件搜索,正则表达式 "." 的含义和 DOS 中的“ ?. ”是一样的。而 SQL 用户则应该知道和 SQL 中的“ _ ( 下划线 ) 一样。

所以,使用“ c.t ”进行搜索将匹配 cat cot (以及另外一些可能无意义的前后为“ c ”“ t ”的单词)。

下面是一个例子:

文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls

正则表达式
sales.

结果
sales1 .xls
orders3.xls
sales2 .xls
sales3 .xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
分析

这里的正则表达式“ sales. ”用来查找以“ sales ”开头并后跟一个任意字符的文本。可以看到,九行中有三行匹配这个模式。

你可能会注意到有时候我们使用“模式”来描述真正的正则表达式。

注意到正则表达式匹配文本中的内容。匹配一般不是整个字符串,而是匹配此模式的文本,尽管这一半是一个字符串的一部分。在上面的例子中,正则表达式并没有匹配整个文本文件,而是匹配了其中的一部分。在将正则表达式匹配结果传递给其他代码或者应用程序处理的时候这点区别很重要。“ . ”可以用来匹配任意的字符、字母表中的字母,数字,甚至是“ . ”本身。

文本
sales.xls
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls

正则表达式
sales.

结果
sales. xls
sales1 . xls
orders3.xls
sales2 . xls
sales3 . xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
分析

示例中包含一个 sales.xls 文件,此文件可以被正则表达式“ sales. ”所匹配,因为“ . ”匹配任意一个字符。

多个“ . ”可以一起使用,包括放在一起(使用“ .. ”可以匹配任意两个字符)或者用于模式中的不同地方。

让我们来看看另外一个例子。现在要找的可能是 "na" 或者 "sa" 而且不管后面跟着的是什么字符:

文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls

正则表达式
.a.

结果
sal es1.xls
orders3.xls
sal es2.xls
sal es3.xls
apac1 .xls
europe2.xls
na1 .xls
na2 .xls
sa1 .xls
分析

正则表达式“ .a. ”不但匹配了 na1 na2 sa1 ,还找到了没有预计到的其他匹配。为什么?因为这个模式是匹配所有中间字母为 a 的三个字符。

在“ .a. ”后面加上一个“ . ”会如何?下面是一个尝试:

文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls

正则表达式
.a..

结果
sale s1.xls
orders3.xls
sale s2.xls
sale s3.xls
apac1 .xls
europe2.xls
na1. xls
na2. xls
sa1. xls
分析

可以看到,“ .a.. ”并不比“ .a. ”要好多少。加上了一个“ . ”符号只是多匹配了一个字符。由于“ . ”是一个特殊字符,当需要搜索“ . ”符号的时候如何办呢?

 

匹配特殊字符

. ”在正则表达式中含有特殊的意义。如果你需要在模式中使用“ . ”,你应该明确的告诉正则表达式你想使用的是一个真正的“ . ”字符,而不是有着特殊含义的“ . ”字符。为了做到这点,可以在“ . ”前面加上反斜线“ \ ”对字符进行转义。这里的“ \ ”也是特殊字符,和其本身的含义是不同的,可以对特殊字符起到转义作用。因此,“ . ”可以表示任意字符,而“ \. ”则表示真正的“ . ”字符。

再来看看上面的例子,这次使用“ \. ”替代“ . ”。

文本
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls

正则表达式
.a.\.xls

结果
sales1.xls
orders3.xls
sales2.xls
sales3.xls
apac1.xls
europe2.xls
na1.xls
na2.xls
sa1.xls
分析

“.a.\.xls”解决了这个问题。第一个“ . ”匹配了“ n ”或者“ s ”。第二个“ . ”匹配了“ 1 ”或者“ 2 ”,而“ \. ”则使用真正的“ . ”字符匹配了文件名和扩展的分隔符, xls 匹配其自身。事实上,不加上 xls 也可以解决问题,这里加上的原因主要是为了避免匹配如 "sa3.doc" 类似的文档。

在正则表达式中,“ \ ”总是用于一个或者多个有着特殊字符的含义之前,从而取消其特殊含义。这里看到了“\.”的使用,在以后将会看到更多利用“ \ ”的例子。

  • 特殊字符的介绍在第四章:使用元字符。

就像你所想象的一样,转义“ \ ”的方法就是使用两个反斜线“ \\ ”。

另外,“ . ”匹配所有字符吗?可能并不正确。在很多的正则表达式实现中,“ . ”匹配除了换行符以外的其他字符。

 

小结

正则表达式,也称为模式,是由字符组成的字符串。这些字符可以是文本字符(真正的文本),也可以是元字符(含有特殊含义的字符)。在本章中你学习到了如何使用文本文字以及元字符来匹配单个字符。“ . ”用来匹配任意字符,“ \ ”用来对特殊字符进行转义。

2
0
分享到:
评论
1 楼 sp42 2016-04-09  
自己写的吗 不错哦

相关推荐

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    正则表达式教程.正则表达式教程.正则表达式教程

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过一套特定的语法和字符组合来定义一个模式,该模式能够识别和处理符合规则的字符串序列。正则表达式广泛应用于编程语言、文本编辑器、...

    正则表达式.rar 正则表达式.rar

    正则表达式,简称为正则或regex,是一种强大的文本处理工具,用于匹配、查找、替换和处理字符串。它在编程、数据验证、文本编辑器等多个领域广泛应用,是IT行业中不可或缺的基础知识。 正则表达式的基本概念: 1. *...

    正则表达式大全.docx

    正则表达式是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换操作。它由特殊字符(称为“元字符”)和普通字符组成,能够灵活地定义要查找的模式。以下是一些常见的正则表达式模式及其用途: 1. ...

    最全正则表达式教程、最好正则表达式教程.pdf

    当我们说某个字符串匹配某个正则表达式时,通常是指该字符串的一部分或几部分满足正则表达式定义的模式。 **示例**: 假设我们需要查找所有以`0`开头,随后是2-3个数字,接着是一个连字号“-”,最后是7或8位数字的...

    正则表达式.rar || 正则表达式.rar

    正则表达式,简称为正则,是一种强大的文本处理工具,用于在字符串中进行模式匹配和搜索替换。在计算机科学和编程领域,正则表达式是处理文本的基础,广泛应用于数据验证、搜索、替换和提取等多种场景。下面将详细...

    正则表达式deelx.zip

    1. **字符匹配**:`.` 代表任意单个字符,`\d` 匹配数字(等同于 `[0-9]`),`\w` 匹配字母、数字或下划线(等同于 `[a-zA-Z0-9_]`),`\s` 匹配任何空白字符。 2. **重复匹配**:`*` 表示前面的元素可以出现零次或...

    正则表达式chm.zip

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串模式。在编程领域,它被广泛应用于数据验证、数据提取、文本搜索和替换等任务。本资料"正则表达式.chm"是一个关于正则表达式的CHM(Microsoft...

    Linux在合集中使用正则表达式来匹配查找.zip

    字符如字母、数字等,元字符如点号(.)代表任意单个字符,星号(*)表示前面的字符可以重复零次或多次,而分组(())则用于将多个字符组合成一个整体。此外,还需了解预定义字符类,如\d代表数字,\w代表字母数字...

    易语言模块彗星正则表达式类.rar

    2. **匹配函数**:对字符串进行匹配,判断是否符合正则表达式模式。可能返回一个布尔值,表示匹配成功与否。 3. **查找函数**:在字符串中查找所有符合正则表达式的位置,返回匹配结果的数组。 4. **替换函数**:...

    正则表达式.rar

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。在Java编程语言中,正则表达式是通过`java.util.regex`包提供的API来实现的。这个压缩包文件"正则表达式.rar"包含了一个名为"正则表达式....

    regex-正则表达式教程.pdf

    正则表达式(Regex)是一种强大的文本处理工具,用于在字符串中匹配、查找、替换特定模式的文本。它通过使用一套特殊的语法来描述一系列字符或者字符模式。这篇"regex-正则表达式教程.pdf"深入浅出地介绍了正则表达式...

    易语言正则表达式类匹配中文

    正则表达式是用于匹配字符串模式的一种强大工具,它使用特定的语法来描述字符串的特征,如单个字符、字符集、重复次数等。在易语言中,正则表达式类提供了多种方法来操作和分析字符串: 1. **创建**:创建正则...

    Python正则表达式字符.xlsx

    Python正则表达式字符.xlsx

    史上最好的正则表达式教程.pdf

    1. 元字符是正则表达式中的特殊字符,它们有特定的含义,如:点号(.)代表任意单个字符;反斜线(\)用于转义特殊字符;字符类([])内列出可匹配字符集等。 2. 字符转义:正则表达式中要匹配特殊字符本身时,需要...

    正则表达式工具.zip

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在这个“正则表达式工具.zip”压缩包中,包含了一个工具,它能帮助开发者自动生成常见...

    正则表达式文档.docx

    正则表达式是一种强大的模式匹配工具,可以用来描述复杂的字符模式,并且可以用来匹配各种类型的字符串。在JavaScript中,正则表达式是由一个RegExp对象表示的,可以使用一个RegExp()构造函数来创建RegExp对象,也...

    Java正则表达式详解.pdf

    句点符号`.`代表任意单个字符,包括空白字符和特殊字符。例如,正则表达式`c.t`将匹配所有形如“cat”、“cot”、“cut”等的字符串。 #### 2.2 方括号符号(`[]`) 方括号`[]`用于表示字符集合,即匹配其中的任意...

    正则表达式大全.pdf

    - `.`:匹配除换行符`\n`外的任意单个字符。 - `^`:匹配输入字符串的开头位置。在多行模式下,也匹配每个新行的开头。 - `[]`:定义一个字符集合,匹配其中任意一个字符。 - `{m,n}`:限定前面的子表达式至少出现m...

Global site tag (gtag.js) - Google Analytics