1、 正则表达式元字符
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意空白字符
\d \d匹配数字
\b 匹配单词的开始或结束
$ 匹配字符串的结束
[abcd] 匹配字符’a’,’b’,’c’,’d’字符
2、 正则表达式的反义
\W 匹配任意不是字母或数字或下划线或汉字
\S 匹配不是空白字符
\D 匹配非数字的字符
\B 匹配不是单词开始或结束的位置
[^X] 除X以外的任意字符
[^aeiou] 匹配字符串的结束
[abcd] 匹配除aeiou字母以外的其它任意字符
3、 重复
* 重复0次或更多次
+ 重复一次或更多次
? 重复0次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
4、分支条件 |
0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)。
5、贪婪与懒惰
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
举例1:表达式 "<td>(.*)</td>" 与字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配时,匹配的结果是:成功;匹配到的内容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符串, 表达式中的 "</td>" 将与字符串中最后一个 "</td>" 匹配。
举例2:相比之下,表达式 "<td>(.*?)</td>" 匹配举例1中同样的字符串时,将只得到 "<td><p>aa</p></td>", 再次匹配下一个时,可以得到第二个 "<td><p>bb</p></td>"。
6、处理选项
Ignorecase 默认情况下,表达式中的字母是要区分大小写的。配置为 Ignorecase 可使匹配时不区分大小写。有的表达式引擎,把 "大小写" 概念延伸至 UNICODE 范围的大小写。
Singleline 默认情况下,小数点 "." 匹配除了换行符(\n)以外的字符。配置为 Singleline 可使小数点可匹配包括换行符在内的所有字符。
Multiline 默认情况下,表达式 "^" 和 "$" 只匹配字符串的开始 ① 和结尾 ④ 位置。如:
①xxxxxxxxx②\n
③xxxxxxxxx④
配置为 Multiline 可以使 "^" 匹配 ① 外,还可以匹配换行符之后,下一行开始前 ③ 的位置,使 "$" 匹配 ④ 外,还可以匹配换行符之前,一行结束 ② 的位置。
Global 主要在将表达式用来替换时起作用,配置为 Global 表示替换所有的匹配。
ExplicitCapture 仅捕获已被显式命名的组。
ECMAScript(JavaScript兼容模式) 使表达式的行为与它在JavaScript里的行为一致。
RightToLeft(从右向左查找) 匹配从右向左而不是从左向右进行。
7、反向引用 \1, \2...
表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 "<td>(.*?)</td>"。
其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是 "\" 加上一个数字。"\1" 引用第1对括号内匹配到的字符串,"\2" 引用第2对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号 "(" 在前,那这一对就先排序号。
举例如下:
举例1:表达式 "('|")(.*?)(\1)" 在匹配 " 'Hello', "World" " 时,匹配结果是:成功;匹配到的内容是:" 'Hello' "。再次匹配下一个时,可以匹配到 " "World" "。
举例2:表达式 "(\w)\1{4,}" 在匹配 "aa bbbb abcdefg ccccc 111121111 999999999" 时,匹配结果是:成功;匹配到的内容是 "ccccc"。再次匹配下一个时,将得到 999999999。这个表达式要求 "\w" 范围的字符至少重复5次,注意与 "\w{5,}" 之间的区别。
举例3:表达式 "<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>" 在匹配 "<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果 "<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。
8、其它通用规则
8.1 表达式中,可以使用 "\xXX" 和 "\uXXXX" 表示一个字符("X" 表示一个十六进制数)
\xXX 编号在 0 ~ 255 范围的字符,比如:空格可以使用 "\x20" 表示
\uXXXX 任何字符可以使用 "\u" 再加上其编号的4位十六进制数表示,比如:"\u4E2D"
8.2在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总
^ 匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
$ 匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
( ) 标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
[ ] 用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
{ } 修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
. 匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."
? 修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
+ 修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
* 修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
| 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"
8.3 如果要要求表达式所匹配的内容是整个字符串,而不是从字符串中找一部分,那么可以在表达式的首尾使用 "^" 和 "$",比如:"^\d+$" 要求整个字符串只有数字。
8.4如果要求匹配的内容是一个完整的单词,而不会是单词的一部分,那么在表达式首尾使用 "\b",比如:使用 "\b(if|while|else|void|int……)\b" 来匹配程序中的关键字。
8.5表达式不要匹配空字符串。否则会一直得到匹配成功,而结果什么都没有匹配到。比如:准备写一个匹配 "123"、"123."、"123.5"、".5" 这几种形式的表达式时,整数、小数点、小数数字都可以省略,但是不要将表达式写成:"\d*\.?\d*",因为如果什么都没有,这个表达式也可以匹配成功。更好的写法是:"\d+\.?\d*|\.\d+"。
8.6能匹配空字符串的子匹配不要循环无限次。如果括号内的子表达式中的每一部分都可以匹配 0 次,而这个括号整体又可以匹配无限次,那么情况可能比上一条所说的更严重,匹配过程中可能死循环。虽然现在有些正则表达式引擎已经通过办法避免了这种情况出现死循环了,比如 .NET 的正则表达式,但是我们仍然应该尽量避免出现这种情况。如果我们在写表达式时遇到了死循环,也可以从这一点入手,查找一下是否是本条所说的原因。
8.7或 "|" 的左右两边,对某个字符最好只有一边可以匹配,这样,不会因为 "|" 两边的表达式因为交换位置而有所不同。
分享到:
相关推荐
在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...
本教程合集涵盖了多种编程语言中的正则表达式规则和应用,包括JavaScript、VB、.NET、Perl等。 在JavaScript中,正则表达式广泛应用于字符串操作,如`match()`、`search()`、`replace()`和`split()`方法。...
### Lucene 使用正则表达式 #### 知识点概览 1. **Lucene简介** 2. **正则表达式(regex)在Lucene中的应用** 3. **regexQuery详解** 4. **示例代码解析** 5. **索引创建与查询流程** 6. **正则表达式的语法** #### ...
Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...
电话号码的验证正则表达式会根据地区规则有所不同。在中国,11位数字的手机号码验证可能如下: ```regex ^1[3-9]\\d{9}$ ``` 这个表达式会匹配以1开头,第二位是3到9之间任意数字,后面跟着9个数字的字符串。 ...
正则表达式由一系列字符和特殊符号组成,可以表达复杂的模式匹配规则。在许多编程语言中,都有内置的库或函数支持正则表达式操作。 例如,如果我们想验证一个字符串是否为有效的电子邮件地址,可以使用以下正则...
在探讨如何利用正则表达式来判断一个字符串除指定字符外不包含其他特殊字符之前,我们首先需要了解正则表达式的基本概念以及本场景中的具体需求。 ### 正则表达式简介 正则表达式是一种强大的文本处理工具,能够...
在提供的示例代码中,我们看到一个简单的登录页面,其中包含了一个名为 `AA` 的 JavaScript 函数,该函数用于验证用户输入的用户名是否符合上述正则表达式的规则。 ```javascript function AA() { var name = ...
正则表达式通过使用预定义的字符集和特殊符号,可以高效地查找、替换或提取符合特定规则的文本。 在实际使用中,正则表达式的作用广泛且强大。以下是一些关键知识点: 1. **基本元素**:正则表达式由基本字符组成...
### Oracle正则表达式详解(用法+实例) #### 一、正则表达式简介 正则表达式是一种用于匹配字符串中字符组合的工具。它由一个或多个字符及特殊的字符元组成,能够帮助我们执行复杂的字符串搜索和替换任务。在...
### 正则表达式在Source Insight中的应用实例 #### 一、正则表达式的概念与基本语法 正则表达式是一种强大的文本匹配工具,广泛应用于各种编程语言和文本处理工具中,包括Source Insight等代码编辑器。通过正则...
1. **元字符**:正则表达式中的特殊字符,用于构建复杂的匹配规则。 - **`.`**:匹配任何单个字符(除了换行符)。 - **`^`**:表示行的开始位置。 - **`$`**:表示行的结束位置。 - **`*`**:前面的字符出现...
本文将深入探讨正则表达式的匹配规则,帮助你理解和掌握这个强大的工具。 一、基础字符匹配 1. 字符匹配:正则表达式可以直接匹配单个字符,例如"a"匹配字母'a'。 2. 位置匹配:"^"表示行首,"$"表示行尾。"\b"匹配...
### 正则表达式规则详解 #### 一、正则表达式基础概念 **1.1 普通字符** 普通字符是指那些在正则表达式中不具有特殊含义的字符,例如字母(包括大小写字母)、数字、汉字、下划线等。当这些字符出现在正则表达式...
正则表达式的构成主要包括基本字符、元字符、量词和预定义字符集等。基本字符包括字母、数字和符号,它们按原意匹配。元字符如点号(.)、星号(*)、加号(+)、问号(?)和花括号({})等,它们具有特殊的含义,...
正则表达式是一种强大的文本处理工具,用于匹配和操作字符串。它们在编程语言、文本编辑器和搜索引擎等众多领域有着广泛的应用。NFA(非确定性有限状态自动机)和DFA(确定性有限状态自动机)是计算理论中用于识别...
通过使用正则表达式,我们可以定义一套规则,这些规则可以用来检查一个字符串是否符合我们设定的模式,或者生成符合模式的新字符串。 Xeger的工作原理是通过解析正则表达式,然后生成与之匹配的随机字符串。例如,...
在编程语言中,如PHP,正则表达式通过其内置的函数集如preg系列函数提供支持。php正则表达式手册则是初学者学习正则表达式的基础读物,介绍了正则表达式的概念、结构、历史及应用。 首先,正则表达式的定义是指定了...
GREP正则表达式的元字符集 以下列出了一些常用的元字符及其含义: - `^`:锚定行的开始。 - `$`:锚定行的结束。 - `.`:匹配一个非换行符的字符。 - `*`:匹配零个或多个先前字符。 - `[]`:匹配一个指定范围内...