正则表达式 说明
/\b([a-z]+) \1\b/gi 一个单词连续出现的位置
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/ 将一个URL解析为协议、域、端口及相对路径
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/ 定位章节的位置
/[-a-z]/ A至z共26个字母再加一个-号。
/ter\b/ 可匹配chapter,而不能terminal
/\Bapt/ 可匹配chapter,而不能aptitude
/Windows(?=95 |98 |NT )/ 可匹配Windows95或Windows98或WindowsNT,当找到一个匹配后,从Windows后面开始进行下一次的检索匹配。
7. 正则表达式匹配规则
7.1 基本模式匹配
一切从最基本的开始。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如:
^once
这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once was a man from NewYork"不匹配。正如如^符号表示开头一样,$符号用来匹配那些以给定模式结尾的字符串。
bucket$
这个模式与"Who kept all of this cash in a bucket"匹配,与"buckets"不匹配。字符^和$同时使用时,表示精确匹配(字符串与模式一样)。例如:
^bucket$
只匹配字符串"bucket"。如果一个模式不包括^和$,那么它与任何包含该模式的字符串匹配。例如:模式
once
与字符串
There once was a man from NewYork
Who kept all of his cash in a bucket.
是匹配的。
在该模式中的字母(o-n-c-e)是字面的字符,也就是说,他们表示该字母本身,数字也是一样的。其他一些稍微复杂的字符,如标点符号和白字符(空格、制表符等),要用到转义序列。所有的转义序列都用反斜杠(\)打头。制表符的转义序列是:\t。所以如果我们要检测一个字符串是否以制表符开头,可以用这个模式:
^\t
类似的,用\n表示“新行”,\r表示回车。其他的特殊符号,可以用在前面加上反斜杠,如反斜杠本身用\\表示,句号.用\.表示,以此类推。
7.2 字符簇
在INTERNET的程序中,正规表达式通常用来验证用户的输入。当用户提交一个FORM以后,要判断输入的电话号码、地址、EMAIL地址、信用卡号码等是否有效,用普通的基于字面的字符是不够的。
所以要用一种更自由的描述我们要的模式的办法,它就是字符簇。要建立一个表示所有元音字符的字符簇,就把所有的元音字符放在一个方括号里:
[AaEeIiOoUu]
这个模式与任何元音字符匹配,但只能表示一个字符。用连字号可以表示一个字符的范围,如:
[a-z] //匹配所有的小写字母
[A-Z] //匹配所有的大写字母
[a-zA-Z] //匹配所有的字母
[0-9] //匹配所有的数字
[0-9\.\-] //匹配所有的数字,句号和减号
[ \f\r\t\n] //匹配所有的白字符
同样的,这些也只表示一个字符,这是一个非常重要的。如果要匹配一个由一个小写字母和一位数字组成的字符串,比如"z2"、"t6"或"g7",但不是"ab2"、"r2d3" 或"b52"的话,用这个模式:
^[a-z][0-9]$
尽管[a-z]代表26个字母的范围,但在这里它只能与第一个字符是小写字母的字符串匹配。
前面曾经提到^表示字符串的开头,但它还有另外一个含义。当在一组方括号里使用^是,它表示“非”或“排除”的意思,常常用来剔除某个字符。还用前面的例子,我们要求第一个字符不能是数字:
^[^0-9][0-9]$
这个模式与"&5"、"g7"及"-2"是匹配的,但与"12"、"66"是不匹配的。下面是几个排除特定字符的例子:
[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[^\"\'] //除了双引号(")和单引号(')之外的所有字符
特殊字符"." (点,句号)在正规表达式中用来表示除了“新行”之外的所有字符。所以模式"^.5$"与任何两个字符的、以数字5结尾和以其他非“新行”字符开头的字符串匹配。模式"."可以匹配任何字符串,除了空串和只包括一个“新行”的字符串。
PHP的正规表达式有一些内置的通用字符簇,列表如下:
字符簇 含义
[[:alpha:]] 任何字母
[[:digit:]] 任何数字
[[:alnum:]] 任何字母和数字
[[:space:]] 任何白字符
[[:upper:]] 任何大写字母
[[:lower:]] 任何小写字母
[[:punct:]] 任何标点符号
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]
7.3 确定重复出现
到现在为止,你已经知道如何去匹配一个字母或数字,但更多的情况下,可能要匹配一个单词或一组数字。一个单词有若干个字母组成,一组数字有若干个单数组成。跟在字符或字符簇后面的花括号({})用来确定前面的内容的重复出现的次数。
字符簇 含义
^[a-zA-Z_]$ 所有的字母和下划线
^[[:alpha:]]{3}$ 所有的3个字母的单词
^a$ 字母a
^a{4}$ aaaa
^a{2,4}$ aa,aaa或aaaa
^a{1,3}$ a,aa或aaa
^a{2,}$ 包含多于两个a的字符串
^a{2,} 如:aardvark和aaab,但apple不行
a{2,} 如:baad和aaa,但Nantucket不行
\t{2} 两个制表符
.{2} 所有的两个字符
这些例子描述了花括号的三种不同的用法。一个数字,{x}的意思是“前面的字符或字符簇只出现x次”;一个数字加逗号,{x,}的意思是“前面的内容出现x或更多的次数”;两个用逗号分隔的数字,{x,y}表示“前面的内容至少出现x次,但不超过y次”。我们可以把模式扩展到更多的单词或数字:
^[a-zA-Z0-9_]{1,}$ //所有包含一个以上的字母、数字或下划线的字符串
^[0-9]{1,}$ //所有的正数
^\-{0,1}[0-9]{1,}$ //所有的整数
^\-{0,1}[0-9]{0,}\.{0,1}[0-9]{0,}$ //所有的小数
最后一个例子不太好理解,是吗?这么看吧:与所有以一个可选的负号(\-{0,1})开头(^)、跟着0个或更多的数字([0-9]{0,})、和一个可选的小数点(\.{0,1})再跟上0个或多个数字([0-9]{0,}),并且没有其他任何东西($)。下面你将知道能够使用的更为简单的方法。
特殊字符"?"与{0,1}是相等的,它们都代表着:“0个或1个前面的内容”或“前面的内容是可选的”。所以刚才的例子可以简化为:
^\-?[0-9]{0,}\.?[0-9]{0,}$
特殊字符"*"与{0,}是相等的,它们都代表着“0个或多个前面的内容”。最后,字符"+"与 {1,}是相等的,表示“1个或多个前面的内容”,所以上面的4个例子可以写成:
^[a-zA-Z0-9_]+$ //所有包含一个以上的字母、数字或下划线的字符串
^[0-9]+$ //所有的正数
^\-?[0-9]+$ //所有的整数
^\-?[0-9]*\.?[0-9]*$ //所有的小数
当然这并不能从技术上降低正规表达式的复杂性,但可以使它们更容易阅读。
分享到:
相关推荐
- **解释**:这个例子展示了如何使用正则表达式的组来捕获特定模式。正则表达式模式中的`(abra(cad)?)`表示匹配"abra"后面可能跟有"cad",并且整个模式可以重复出现一次或多次。 通过以上内容,我们可以看出,正则...
### 正则表达式知识点详解 #### 一、正则表达式基础介绍 正则表达式是一种用于描述字符串模式的强大工具,在文本处理、数据验证等领域有着广泛的应用。它通过一系列特殊字符来定义需要匹配的字符串模式,从而实现...
这里使用了正则表达式 `r"\s+(\d+)\s+"` 来匹配包含数字的部分,这些数字代表了表空间的使用率。具体步骤如下: - **正则表达式**: `r"\s+(\d+)\s+"`。 - `\s+`: 匹配一个或多个空白字符。 - `(\d+)`: 匹配一个或...
当需要对正则表达式的部分结果进行进一步处理时(如重复使用或修改),可以通过分组来实现这一目标。本文将详细介绍Java中正则表达式的分组引用概念及其应用。 #### 分组引用的格式与原理 分组引用是指通过在正则...
### 正则表达式知识点详解 #### 一、正则表达式基础介绍 正则表达式是一种用于描述字符串模式的强大工具,在计算机编程中被广泛应用于文本处理任务,如字符串匹配、搜索与替换等操作。 #### 二、常用正则表达式...
这个包提供了一系列的方法,如`Compile`用于编译正则表达式,`MatchString`用于检查字符串是否匹配正则表达式,以及`ReplaceAllString`用于替换字符串中匹配的部分。 为了生成符合给定正则表达式的伪随机字符串,...
- **功能**: 类似于 `REPLACE` 函数,用于替换字符串中符合正则表达式的部分。 - **语法**: ```sql REGEXP_REPLACE(expr, pattern, replacement [, start_position] [, occurrence] [, match_parameter]) ``` - *...
### 正则表达式——递归匹配与非贪婪匹配 #### 一、递归匹配 在正则表达式中,递归匹配是一个重要的概念,它主要用于处理那些具有嵌套结构的数据,例如数学公式中的括号匹配或HTML标签的匹配。 ##### 1.1 嵌套...
在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一个正则表达式来验证输入是否符合一年12个月份的格式。 首先,我们要明确一年中的12个月份的...
这个正则表达式包含多个部分,如`\b`表示单词边界,`[A-Za-z0-9._%+-]`定义了允许的字符集,`@`是匹配邮件地址中的“@”符号,`[A-Z|a-z]{2,}`则用来匹配顶级域名,至少由两个字母组成。 三目运算符和正则表达式...
根据提供的部分内容,我们可以总结出以下常用的正则表达式语法: 1. **转义字符**:`\'`(反斜杠)用来转义其后的字符,将其标记为特殊字符、原义字符、后向引用或八进制转义符。 - 示例: - `'n'` 匹配字符 "n...
5. **JAVA正则表达式--Pattern和Matcher.doc** 这份文档可能深入讲解了`Pattern`和`Matcher`类的用法,如`Pattern.compile()`用于编译正则表达式,`Matcher.find()`用于查找字符串中的匹配部分,`Matcher.group()`...
本文件提供了多个正则表达式的例子,涉及验证数字、字符、电子邮件、URL、电话号码等多个方面,体现了正则表达式在不同场景下的应用。以下是一些具体的应用实例及其解释: 1. 验证数字的正则表达式集: - 验证数字...
在这个"正则表达式趣味例子集合"中,我们将探索正则表达式的独特魅力,通过有趣的例子,如模拟"跳棋"规则,来深入了解其工作原理和应用。 1. **正则表达式基础** - **字符集**: 用方括号`[]`定义一组字符,例如`...
在这个例子中,`validateAmount`函数接收一个字符串参数,然后使用正则表达式进行匹配测试。如果匹配成功,返回`true`,否则返回`false`。 在提供的压缩包文件中,`testmoney.html`可能是用来展示一个网页界面,让...
另外,`replaceAll()`方法可以用于替换字符串中匹配正则表达式的所有部分。例如,如果你想移除所有非数字字符,可以这样做: ```java String input = "123abc456"; input = pattern.compile("\\D").replaceAll("", ...
在这个例子中,我们首先编译了一个匹配浮点数的正则表达式,然后在文本中查找所有浮点数,找到了`'123.45'`和`'10.5'`。 总结,`re.compile()`是Python正则表达式的重要工具,它使得我们可以预先编译正则表达式模式...
在Go语言中,正则表达式(Regular Expression,简称RE)是一种强大的文本处理工具,它能用来匹配、查找、替换符合特定模式的字符串。在Go的`regexp`包中,提供了对正则表达式的支持。这个名为“Go-Go的常用正则...
正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、数据提取等IT领域。在这个“常用正则表达式HTML,JAVA合集”中,我们主要关注的是HTML和Java环境下的正则...
VBScript 正则表达式详解 VBScript 中的正则表达式详解是指使用 RegExp 对象来提供简单的正则表达式支持。该对象有三个属性和三个方法,分别是 Global 属性、IgnoreCase 属性、Pattern 属性、Execute 方法、Replace...