续上
3. 其他通用规则
还有一些在各个正则表达式引擎之间比较通用的规则,在前面的讲解过程中没有提到。
3.1 表达式中,可以使用 "\xXX" 和 "\uXXXX" 表示一个字符("X" 表示一个十六进制数)
3.2 在表达式 "\s","\d","\w","\b" 表示特殊意义的同时,对应的大写字母表示相反的意义
3.3 在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总
字符
|
说明
|
^
|
匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
|
$
|
匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
|
( )
|
标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
|
[ ]
|
用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
|
{ }
|
修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
|
.
|
匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."
|
?
|
修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
|
+
|
修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
|
*
|
修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
|
|
|
左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"
|
3.4 括号 "( )" 内的子表达式,如果希望匹配结果不进行记录供以后使用,可以使用 "(?:xxxxx)" 格式
举例1:表达式 "(?:(\w)\1)+" 匹配 "a bbccdd efg" 时,结果是 "bbccdd"。括号 "(?:)" 范围的匹配结果不进行记录,因此 "(\w)" 使用 "\1" 来引用。
3.5 常用的表达式属性设置简介:Ignorecase,Singleline,Multiline,Global
表达式属性
|
说明
|
Ignorecase
|
默认情况下,表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎,把 "大小写" 概念延伸至 UNICODE 范围的大小写。
|
Singleline
|
默认情况下,小数点 "." 匹配除了换行符(\n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。
|
Multiline
|
默认情况下,表达式 "^" 和 "$" 只匹配字符串的开始 ① 和结尾 ④ 位置。如:
①xxxxxxxxx②\n ③xxxxxxxxx④
配置为 Multiline 可以使 "^" 匹配 ① 外,还可以匹配换行符之后,下一行开始前 ③ 的位置,使 "$" 匹配 ④ 外,还可以匹配换行符之前,一行结束 ② 的位置。
|
Global
|
主要在将表达式用来替换时起作用,配置为 Global 表示替换所有的匹配。
|
4. 其他提示
4.1 如果想要了解高级的正则引擎还支持那些复杂的正则语法,可参见本站 DEELX 正则引擎的说明文档。
4.2 如果要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部分,那么可以在表达式的首尾使用 "^" 和 "$",比如:"^\d+$" 要求整个字符串只有数字。
4.3 如果要求匹配的内容是一个完整的单词,而不会是单词的一部分,那么在表达式首尾使用 "\b",比如:使用 "\b(if|while|else|void|int……)\b" 来匹配程序中的关键字。
4.4 表达式不要匹配空字符串。否则会一直得到匹配成功,而结果什么都没有匹配到。比如:准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时,整数、小数点、小数数字都可以省略,但是不要将表达式写成:"\d*\.?\d*",因为如果什么都没有,这个表达式也可以匹配成功。更好的写法是:"\d+\.?\d*|\.\d+"。
4.5 能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次,而这个括号整体又可以匹配无限次,那么情况可能比上一条所说的更严重,匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况出现死循环了,比如 .NET 的正则表达式,但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环,也可以从这一点入手,查找一下是否是本条所说的原因。
4.6 合理选择贪婪模式与非贪婪模式,参见话题讨论。
4.7 或 "|" 的左右两边,对某个字符最好只有一边可以匹配,这样,不会因为 "|" 两边的表达式因为交换位置而有所不同。
5. 进阶与实战
有了从本文中掌握的基础,我们可以从实践中进一步巩固我们使用正则表达式的技巧。
5.1 下载正则表达式文档 chm 版本
[ 点击下载 chm 版本] - DEELX 正则语法,包含其他高级语法的 chm 版本。
5.2 下载正则工具 Regex Match Tracer 2.0 试用版(正版很值得购买)
[ 下载 Match Tracer] - 471kb
5.3 免费使用 Regex Match Tracer Web 版
[ 使用 Match Tracer Web 版]
本 Web 版工具为免费使用,不受 Regex Match Tracer 主程序的试用期限制。
分享到:
相关推荐
(条件)表达式1|表达式2)`)。这些特性使正则表达式能够处理更复杂的模式匹配需求。 例如,如果你想匹配邮箱地址,可以使用以下模式: ```vba regEx.Pattern = "^[\w.-]+@[\w-]+(\.[\w-]+)*$" ``` 这个模式匹配以...
1. 元字符:这些字符具有特殊的含义,是构建正则表达式的基础。例如,“.”可以匹配除换行符之外的任意单个字符,“*”表示匹配前面的子表达式零次或多次,“+”表示匹配前面的子表达式一次或多次,“?”表示匹配...
1. 邮箱验证:使用正则表达式来验证邮箱的格式是否正确。 2. 字符串查找:使用正则表达式来查找字符串中的某个模式。 3. 字符串替换:使用正则表达式来将字符串中的某个模式替换为另一个字符串。 Java正则表达式的...
正则表达式是编程语言中用于模式匹配和字符串处理的强大工具,在Java中也不例外。Java的正则表达式功能强大,可以用于验证输入、提取信息、替换文本等多种场景。本资料"java_zhengze.rar"提供了对Java正则表达式的...
1. 创建正则表达式:定义你要匹配的模式,例如`^[\d]{3}-[\d]{4}$`用于匹配美国电话号码格式。 2. 编译模式:将正则表达式编译成一个可以执行的对象,以提高后续匹配的速度。 3. 执行匹配:使用编译后的对象在目标...
1. **正则表达式基本概念** - 元字符:如`.`, `*`, `+`, `?`, `{}`, `[]`, `\`, `^`, `$`等,它们具有特殊含义,在正则表达式中用来定义模式。 - 字符类:例如`[abc]`,匹配其中任意一个字符。 - 量词:`*`, `+`,...
1. **匹配**:检查输入字符串是否符合特定的正则表达式模式。 2. **查找**:在字符串中查找符合正则表达式的部分。 3. **替换**:用新的字符串替换匹配到的正则表达式部分。 4. **分割**:根据正则表达式将字符串...
在标准C++库中,虽然没有内置的正则表达式支持,但通过包含如 Boost 或 TR1(Technical Report 1)扩展,或者在较新的C++11及更高版本中使用库,开发者可以实现正则表达式功能。然而,对于MFC开发者来说,使用MFC内...
"正则表达式必知必会" 正则表达式是一种强大的文本处理工具,广泛应用于各个领域。下面是对正则表达式的详细解释: 正则表达式的用途 正则表达式主要用于处理文本,提供了两大主要功能:查找和替换。查找功能允许...
1. **C#中的正则表达式基础** - `System.Text.RegularExpressions`命名空间:C#中的正则表达式操作主要基于这个命名空间下的类和方法。 - `Regex`类:这是处理正则表达式的核心类,提供了多种与正则相关的静态方法...
正则表达式教程:30分钟让你精通正则表达式语法 _
1. 正则表达式基础: - 字符类:例如,[abc] 匹配任何一个'a'、'b'或'c'。 - 量词:* 表示零次或多次,+ 表示一次或多次,? 表示零次或一次,{n} 表示恰好n次,{n,} 表示至少n次,{n,m} 表示至少n次但不超过m次。 ...
1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...
1. JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript 2. 正则表达式在线生成工具:http://tools.jb51.net/regex/create_reg 这些工具可以帮助开发者快速测试和生成正则表达式,从而提高...
正则表达式是一种威力无比强大的武器,几乎在所有的程序设计语言里和计算机平台上都可以用它来完成各种复杂的文本处理工作。本书从简单的文本匹配开始,循序渐进地介绍了很多复杂内容,其中包括回溯引用、条件性求值...
1. `Match`:检查输入字符串是否符合指定的正则表达式模式。 2. `Matches`:返回所有符合正则表达式的子串集合。 3. `Replace`:将字符串中所有符合正则表达式的子串替换为新的字符串。 4. `Split`:根据正则表达式...
:>(.*)<\/\1>|\s+\/>)$/` - 此正则表达式尝试匹配HTML标签的基本结构,但并不完全适用于所有复杂的HTML结构。 8. Unicode汉字范围:`/^[u4e00-u9fa5],{0,}$/` 和匹配中文字符的正则表达式:`[\u4e00-\u9fa5]` - 这...
1. **Introduction to Regular Expressions(正则表达式简介)** - **Solving Real Problems(解决实际问题)**:这部分介绍如何使用正则表达式解决日常开发工作中遇到的问题。 - **Regular Expressions as a ...
1. **模糊查询**:通过正则表达式匹配相似的文本,如查询包含特定单词或短语的记录。 ```sql SELECT * FROM articles WHERE content REGEXP '.*example.*'; ``` 2. **格式验证**:确保输入的数据符合预期的格式,...
本书自第1 版开始着力于教会读者“以正则表达式来思考”,来让读者真正“精通”正则表达式。该版对PHP的相关内容、Java1.5和Java1.6的新特性作了可观的扩充讲解。任何有机会使用正则表达式的读者都会从中获益匪浅。