字符匹配
正则表达式的关键之处在于确定你要搜索匹配的东西,如果没有这一概念,Res将毫无用处。
每一个表达式都包含需要查找的指令,如表A所示。
Table A: Character-matching regular expressions |
操作 | 解释 | 例子 | 结果 |
. | Match any one character | grep .ord sample.txt | Will match “ford”, “lord”, “2ord”, etc. in the file sample.txt. |
[ ] | Match any one character listed between the brackets | grep [cng]ord sample.txt | Will match only “cord”, “nord”, and “gord” |
[^ ] | Match any one character not listed between the brackets | grep [^cn]ord sample.txt | Will match “lord”, “2ord”, etc. but not “cord” or “nord” |
| | grep [a-zA-Z]ord sample.txt | Will match “aord”, “bord”, “Aord”, “Bord”, etc. |
| | grep [^0-9]ord sample.txt | Will match “Aord”, “aord”, etc. but not “2ord”, etc. |
重复操作符
重复操作符,或数量词,都描述了查找一个特定字符的次数。它们常被用于字符匹配语法以查找多行的字符,可参见表B。
Table B: Regular expression repetition operators |
操作 | 解释 | 例子 | 结果 |
? | Match any character one time, if it exists | egrep “?erd” sample.txt | Will match “berd”, “herd”, etc. and “erd” |
* | Match declared element multiple times, if it exists | egrep “n.*rd” sample.txt | Will match “nerd”, “nrd”, “neard”, etc. |
+ | Match declared element one or more times | egrep “[n]+erd” sample.txt | Will match “nerd”, “nnerd”, etc., but not “erd” |
{n} | Match declared element exactly n times | egrep “[a-z]{2}erd” sample.txt | Will match “cherd”, “blerd”, etc. but not “nerd”, “erd”, “buzzerd”, etc. |
{n,} | Match declared element at least n times | egrep “.{2,}erd” sample.txt | Will match “cherd” and “buzzerd”, but not “nerd” |
{n,N} | Match declared element at least n times, but not more than N times | egrep “n[e]{1,2}rd” sample.txt | Will match “nerd” and “neerd” |
锚
锚是指它所要匹配的格式,如图C所示。使用它能方便你查找通用字符的合并。例如,我用vi行编辑器命令:s来代表substitute,这一命令的基本语法是:
s/pattern_to_match/pattern_to_substitute/
Table C: Regular expression anchors |
操作 | 解释 | 例子 | 结果 |
^ | Match at the beginning of a line | s/^/blah / | Inserts “blah “ at the beginning of the line |
$ | Match at the end of a line | s/$/ blah/ | Inserts “ blah” at the end of the line |
\< | Match at the beginning of a word | s/\</blah/ | Inserts “blah” at the beginning of the word |
| | egrep “\<blah” sample.txt | Matches “blahfield”, etc. |
\> | Match at the end of a word | s/\>/blah/ | Inserts “blah” at the end of the word |
| | egrep “\>blah” sample.txt | Matches “soupblah”, etc. |
\b | Match at the beginning or end of a word | egrep “\bblah” sample.txt | Matches “blahcake” and “countblah” |
\B | Match in the middle of a word | egrep “\Bblah” sample.txt | Matches “sublahper”, etc. |
间隔
Res中的另一可便之处是间隔(或插入)符号。实际上,这一符号相当于一个OR语句并代表|符号。下面的语句返回文件sample.txt中的“nerd” 和 “merd”的句柄:
egrep “(n|m)erd” sample.txt
间隔功能非常强大,特别是当你寻找文件不同拼写的时候,但你可以在下面的例子得到相同的结果:
egrep “[nm]erd” sample.txt
当你使用间隔功能与Res的高级特性连接在一起时,它的真正用处更能体现出来。
一些保留字符
Res的最后一个最重要特性是保留字符(也称特定字符)。例如,如果你想要查找“ne*rd”和“ni*rd”的字符,格式匹配语句“n[ei]*rd”与“neeeeerd” 和 “nieieierd”相符合,但并不是你要查找的字符。因为‘*’(星号)是个保留字符,你必须用一个反斜线符号来替代它,即:“n[ei]\*rd”。其它的保留字符包括:
- ^ (carat)
- . (period)
- [ (left bracket}
- $ (dollar sign)
- ( (left parenthesis)
- ) (right parenthesis)
- | (pipe)
- * (asterisk)
- + (plus symbol)
- ? (question mark)
- { (left curly bracket, or left brace)
- \ backslash
一旦你把以上这些字符包括在你的字符搜索中,毫无疑问Res变得非常的难读。比如说以下的PHP中的eregi搜索引擎代码就很难读了。
eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$sendto)
你可以看到,程序的意图很难把握。但如果你抛开保留字符,你常常会错误地理解代码的意思。如果你想阅览Open Group组织的规则的完整描述,你可以参见:Regular Expressions,欢迎你在其中的讨论区发表你的问题或观点。
分享到:
相关推荐
2. 编译模式:将正则表达式编译成一个可以执行的对象,以提高后续匹配的速度。 3. 执行匹配:使用编译后的对象在目标字符串上执行匹配操作。 4. 处理结果:检查匹配结果,获取匹配的子串,或进行替换等操作。 需要...
正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换或过滤成符合正则表达式规则的输出表达式。这样的工具在编程、数据分析、文本挖掘等领域有着广泛的应用。 1. **正则表达式基本概念** ...
4. **分割**:根据正则表达式将字符串分割成多个子串。 5. **捕获组**:提取匹配的子串,特别是对于包含括号的正则表达式,可以获取多个匹配部分。 6. **修饰符**:如全局匹配(g)使匹配不局限于第一个出现的位置,...
- `Regex.Split(input, pattern)`:根据正则表达式模式将输入字符串分割成多个子字符串。 4. **本项目特性** - 查找功能:用户可以输入待检测的文本和正则表达式,工具会返回所有匹配的结果。 - 替换功能:除了...
正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则表达式处理模块。这个库通常包含一系列的类和函数,允许程序员编写符合特定模式...
在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...
"正则表达式必知必会" 正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许...
正则表达式整理汇总,含以下内容 [1]里面在包括一个正则表达式测试小程序 RegexTester.exe [2]正则表达式30分钟入门教程.pdf] [3]正则表达式规则.doc [4]正则表达式30分钟入门教程.mht 自己整理用的,现在...
Java使用正则表达式提取XML节点内容的方法示例 Java使用正则表达式提取XML节点内容的方法示例主要介绍了Java使用正则表达式提取XML节点内容的方法,结合具体实例形式分析了java针对xml格式字符串的正则匹配相关操作...
正则表达式是一种强大的文本处理工具,用于匹配、查找、替换和分析字符串。它通过预定义的模式来识别和操作字符串中的数据。以下是一些常见的正则表达式及其用途: 1. 匹配中文字符:`[u4e00-u9fa5]` - 这个正则...
在C语言中,使用正则表达式库可以实现复杂的文本搜索、替换和分析操作,而无需编写复杂的字符串处理代码。PCRE库提供了丰富的API接口,包括编译正则表达式、执行匹配、获取匹配结果等。 PCRE库的特性包括: 1. **...
正则表达式验证工具 V1.0 本软件主要用于检测正则表达式是否正确。 运行环境:本软件为绿色软件,无需安装,但需要Microsoft .NET Framework 4 支持,如果没有请前去下载(下载路径:...
- `子程序_正则文本分割`:根据正则表达式将文本分割成多个部分。 - `子程序_正则匹配数量`:计算文本中符合正则表达式的匹配次数。 3. **易语言中的正则表达式替换实例** - 基本替换:如将所有数字替换为星号,...
### 正则表达式在数据库查询中的应用 #### 引言 在数据库管理与应用程序开发中,查询数据是一项常见的任务。传统的SQL查询虽然强大,但在处理复杂查询时可能存在一定的局限性,尤其是涉及到文本数据的模式匹配时。...
随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校...
在Delphi 2010这个经典的集成开发环境中,有一款专门针对正则表达式的插件,它极大地提升了开发者的生产力,使得在Delphi程序中应用正则表达式变得简单而强大。 这款名为"Delphi 2010正则表达式插件"的组件,其核心...
例如,`matches()`方法会检查整个输入字符串是否完全符合正则表达式,而`find()`则会在输入字符串中查找第一个匹配的部分。 在Java中,正则表达式的语法相当丰富,包括但不限于: 1. 字符集:`[]`用来定义一组字符...
正则表达式自动生成器V2.0.0.1是一款强大的工具,旨在帮助用户方便快捷地构建和测试正则表达式。它提供了多语言支持,使得不同地区的用户都能无障碍地使用。在IT领域,正则表达式是进行文本处理、数据验证和搜索替换...
正则表达式(Regular Expression,简称regex)是一种用于匹配字符串的强大工具,广泛应用于文本处理、数据验证、搜索和替换等场景。在编程语言中,正则表达式通常以字符串的形式存在,通过特定的语法和模式来定义...