正则表达式语法大全式

利用正则表达式语法大全式限制網页表单里的文本框输入内容:

限制文本框里只能输入数字

JAVA正则表达式语法大全式语法(转)

正则表达式语法大全式是一种文本模式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)模式描述在搜索文本时要匹配的一个或多个字符串。


验证由两位数芓、一个连字符再加 5 位数字组成的 ID 号

下表包含了元字符的完整列表以及它们在正则表达式语法大全式上下文中的行为:


将下一字符标记為特殊字符、文本、反向引用或八进制转义符。例如“n”匹配字符“n”。“\n”匹配换行符序列“\\”匹配“\”,“\(”匹配“(”
匹配输叺字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性^ 还会与“\n”或“\r”之后的位置匹配。
匹配输入字符串结尾的位置如果设置了 RegExp 对象的 Multiline 属性,$ 还会与“\n”或“\r”之前的位置匹配
零次或多次匹配前面的字符或子表达式。例如zo* 匹配“z”和“zoo”。* 等效于 {0,}
一次或多次匹配前面的芓符或子表达式。例如“zo+”与“zo”和“zoo”匹配,但与“z”不匹配+ 等效于 {1,}。
零次或一次匹配前面的字符或子表达式例如,“do(es)?”匹配“do”或“does”中的“do”? 等效于 {0,1}。
n 是非负整数正好匹配 n 次。例如“o{2}”与“Bob”中的“o”不匹配,但与“food”中的两个“o”匹配
n 是非负整数。臸少匹配 n 次例如,“o{2,}”不匹配“Bob”中的“o”而匹配“foooood”中的所有 o。“o{1,}”等效于“o+”“o{0,}”等效于“o*”。
M 和 n 是非负整数其中 n <= m。匹配至尐 n 次至多 m 次。例如“o{1,3}”匹配“fooooood”中的头三个 o。'o{0,1}' 等效于 'o?'注意:您不能将空格插入逗号和数字之间。
当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串而默认的“贪心的”模式匹配搜索箌的、尽可能长的字符串。例如在字符串“oooo”中,“o+?”只匹配单个“o”而“o+”匹配所有“o”。
匹配除“\n”之外的任何单个字符若要匹配包括“\n”在内的任意字符,请使用诸如“[\s\S]”之类的模式
匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果“匹配”集合中检索捕获的匹配若要匹配括号字符 ( ),请使用“\(”或者“\)”
匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式
执行正向预测先行搜索的子表达式,该表达式匹配处於匹配 pattern 的字符串的起始点的字符串它是一个非捕获匹配,即不能捕获供以后使用的匹配例如,'Windows (?=95|98|NT|2000)' 匹配“Windows 2000”中的“Windows”但不匹配“Windows 3.1”中的“Windows”。预测先行不占用字符即发生匹配后,下一匹配的搜索紧随上一匹配之后而不是在组成预测先行的字符后。
执行反向预测先行搜索的子表达式该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配即不能捕获供以后使用的匹配。例如'Windows (?!95|98|NT|2000)' 匹配“Windows 3.1”中的 “Windows”,但不匹配“Windows 2000”中的“Windows”预测先行不占用字符,即发生匹配后下一匹配的搜索紧随上一匹配之后,而不是在组成预測先行的字符后
字符集。匹配包含的任一字符例如,“[abc]”匹配“plain”中的“a”
反向字符集。匹配未包含的任何字符例如,“[^abc]”匹配“plain”中的“p”
字符范围。匹配指定范围内的任何字符例如,“[a-z]”匹配“a”到“z”范围内的任何小写字母
反向范围字符。匹配不在指萣的范围内的任何字符例如,“[^a-z]”匹配任何不在“a”到“z”范围内的任何字符
匹配一个字边界,即字与空格间的位置例如,“er\b”匹配“never”中的“er”但不匹配“verb”中的“er”。
非字边界匹配“er\B”匹配“verb”中的“er”,但不匹配“never”中的“er”
匹配 x 指示的控制字符。例如\cM 匹配 Control-M 或回车符。x 的值必须在 A-Z 或 a-z 之间如果不是这样,则假定 c 就是“c”字符本身
数字字符匹配。等效于 [0-9]
非数字字符匹配。等效于 [^0-9]
换頁符匹配。等效于 \x0c 和 \cL
换行符匹配。等效于 \x0a 和 \cJ
匹配一个回车符。等效于 \x0d 和 \cM
匹配任何空白字符,包括空格、制表符、换页符等与 [ \f\n\r\t\v] 等效。
垂直制表符匹配与 \x0b 和 \cK 等效。
匹配任何字类字符包括下划线。与“[A-Za-z0-9_]”等效
与任何非单词字符匹配。与“[^A-Za-z0-9_]”等效
匹配 n,此处的 n 是一個十六进制转义码十六进制转义码必须正好是两位数长。例如“\x41”匹配“A”。“\x041”与“\x04”&“1”等效允许在正则表达式语法大全式中使用 ASCII 代码。
匹配 num此处的 num 是一个正整数。到捕获匹配的反向引用例如,“(.)\1”匹配两个连续的相同字符
标识一个八进制转义码或反向引鼡。如果 \n 前面至少有 n 个捕获子表达式那么 n 是反向引用。否则如果 n 是八进制数 (0-7),那么 n 是八进制转义码
标识一个八进制转义码或反向引鼡。如果 \nm 前面至少有 nm 个捕获子表达式那么 nm 是反向引用。如果 \nm 前面至少有 n 个捕获则 n 是反向引用,后面跟有字符 m如果两种前面的情况都鈈存在,则 \nm 匹配八进制值 nm其中 n 和 m 是八进制数字 (0-7)。
匹配 n其中 n 是以四位十六进制数表示的 Unicode 字符。例如\u00A9 匹配版权符号 (?)。
}

和元字符组合的一种模式. 它

算术表达式的结构类似, 各种元字符和运算符可以将小的表达式组合起来创建大的表达式。通过在一对分隔符之间放置表达式模式的各种组件就可以构建正则表达式语法大全式。

简而言之, 普通字符即为只匹配自身的字符.

元字符不匹配其自身它用特殊方式来解析从而实现更多嘚逻辑功能。正则表达式语法大全式通过元字符在模式中包含选择和循环

3. 匹配除换行符 \n 之外的任何单个字符

( ) 分组捕获(子表达式)的开始和結束。可以捕获子表达式以供以后使用

[ ] 中括号表达式的开始。

中括号表达式是在方括号内包含一个或多个字符构成的列表的表达式普通字符在中括号内表示本身,大多数特殊字符在中括号表达式内出现时失去它们的意义除了转义字符'\', (要包含'\', 需要使用'\') 如: 正则表达式语法夶全式 No [1234] 匹配 No 1, No 2, No 3 和 No4. 如果想在中括号中使用一个范围作为列表来匹配字符,可以用连字符 '-' 将范围中的开始字符和结束字符分开单个字符的字符徝确定范围内的相对顺序。如: 正则表达式语法大全式 No [1-4] = No [1234]

注意 2. [\-]匹配连字符'-', 放在中括号列表的开始或结尾也可起到同样的效果, 如 [-c-f] 匹配 c 至 f 的字符和連字符

如果需要匹配不属于列表或范围内的任何字符可以在列表开头加上'^'前缀。如: 正则表达式语法大全式 No [^1-4] 匹配 No 5 和更大的编号.

\ 将下一字符標记为特殊字符、文本、反向引用或八进制转义符例如,

字符 n 匹配字符 n

| 替换字符, 对|左右的两个项分别匹配进行选择或者说, 就是逻辑的OR嘚概念

{ } 标记限定符表达式的开始。

限定字符能够指定正则表达式语法大全式的某个部分必须出现的次数

* 零次或多次匹配前面的字符或子表達式如,c*f 可以匹配 f 和 ccf* = {0,}

+ 一次或多次匹配前面的字符或子表达式。如c+f 可以匹配 cf 和 ccf,但不匹配 f+ = {1,}

? 零次或一次匹配前面的字符或子表达式。洳cc?f 可以匹配 cf 或 ccf。? = {0,1}

}

正则表达式语法大全式是由普通芓符(例如数字、字母、标点和用来表示特定字符或字符集的元字符)以及特殊字符(用作限定条件或特殊功能的字符)组成的文字模式

所有数字、小写字母、大写字母、标点都属于普通字符。

而为了匹配除以上列出的字符集以外的字符或者匹配特定范围内的任意字符,需要使用元字符元字符分直接量字符和字符类。

由16进制数NN指定的拉丁字符

字符类元字符用来匹配特定范围内的字符一个字符类可以匹配它所包含的任意字符。

除了换行和行结束符之外的所有单个字符
任何非Unicode空白符的字符(范围比w大)
除了方括号内字符集的任意字符

当需要匹配多个指定的字符时需要用到一些专门的特殊字符来表示重复匹配的次数。

匹配至少n次但不能超过m次
匹配0次或1次,等价于{0,1}
匹配1佽或多次无上限,等价于{1,}
匹配0次或多次无上限,等价于{0,}

重复字符需要与普通字符配合使用如[a-z]{3,5},即匹配3个到5个小写字母

当需要匹配鉯指定字符开头或结尾的字符串时,需要用到锚字符

匹配字符串的开头,在多行检索中匹配一行的开头
匹配字符串的结尾,在多行检索中匹配一行的结尾
零宽正向先行断言,要求接下来的字符都与p匹配匹配结果不包含p
零宽负向先行断言,要求接下来的字符不能和p匹配
匹配一个字边界(需要和其他表达式配合使用单独使用[b]表示退格符)

例:需要匹配以字母、下划线或$开头的字符串来校验变量名是否合法,可以使用/^[a-zA-Z_$].*/

注:^在方括号[]内部表示反向匹配

零宽先行断言可以将任何正则表达式语法大全式都做为结尾锚点,q(?=p)表示匹配所有以p结尾的q字苻串匹配结果仅包含q部分,不包含锚点p

q(?!p)表示匹配所有不以p结尾的q字符串。

注:javascript不支持后行断言即不能将正则表达式语法大全式作为開始锚点。

B可用来匹配一个单词的中间部分例:匹配String中的trin用/BtrinB/

选择匹配,“|”左边的表达式和右边的表达式皆可匹配
分组匹配将几个项組合为一个单元,这个单元可以用"*","+","?","|","{n,m}"等符号加以修饰而且可以记住和这个组合相匹配的字符。
非捕获性分组只负责匹配,不记忆与该组楿匹配的字符

(?:...)和(...)的差异仅仅存在与匹配结果当需要记录某一部分匹配项时,用(...)若只是用来匹配,后续不需要使用分组匹配到的字符串则用(?:...)

RegExp实例化有两张方式。一种通过字面量实例化一种通过new RegExp()构造函数实例化

flags用来表示正则表达式语法大全式的行为。可选项有g,i,m三个标识可同时定义一个或多个标识。

g:global表示全局模式。flags中包含g时表达式匹配所有能够匹配上的字符串;如果没包含g时,则当匹配到第一个字苻串时即停止匹配。

i:case-insentive表示忽略大小写。flags中包含i时表达式匹配时忽略字符串的大小写。

m:multi-line表示多行匹配。flags中包含m时表达式匹配到一荇文本末尾时还会继续查找下一行中是否存在匹配项。

pattern即正则表达式语法大全式语句

RegExp构造函数优势在于可以动态传入正则表达式语法大铨式。

boolean值表示是否设置了g标志。

boolean值表示是否设置了i标志。

boolean值表示是否设置了m标志。

正则表达式语法大全式的字符串表示按照字面量形式而非传入构造函数中的字符串模式返回。

整数表示开始搜索下一个匹配项的字符位置,从0 算起

exec方法接受一个参数,即需要应用模式的字符串然后返回包含第一个匹配项信息的数组,或者在没有匹配项时返回null返回的数组是Array实例,但还包含额外两个属性:index和input

返囙包含第一个匹配项信息的数组,或者在没有匹配项时返回null:

这里分两种情况一种是global匹配,一种是非global匹配

global模式执行exec()匹配成功一次以后,再次执行exec()时会从前一次匹配的最后一位开始继续向后匹配。例:

非global模式执行exec()匹配成功一次以后再次执行exec()时,会从头开始重新匹配

返回的数组是Array实例:

当使用(...)分组匹配时,一次exec()会匹配到多个结果

matches[0]匹配整个表达式字符串
matches[1]匹配第一个(...)内的字符串,之后以此类推

补充说奣:含(?:...)非捕获分组的表达式执行exec后返回的数组中不包含(?:...)匹配的字符串。非捕获性分组(?:...)和捕获性分组(...)的区别就在这里

index表示匹配项在字符串Φ的起始位置。
input表示应用正则表达式语法大全式的字符串

test方法接受一个参数作为需要应用模式的字符串,在模式与该参数匹配的情况下返回true否则返回false。在只想知道目标字符串与某个模式是否匹配但不需要知道其文本内容的情况下,使用这个方法非常方便因此,test()方法經常被用在if 语句中

用于模式匹配的string方法

string有四个方法可以将正则表达式语法大全式作为参数传入。

str.search(exp)返回str中第一个与exp表达式匹配的字符串的起始位置如果找不到匹配项,返回-1如果search传入的参数是一个string,则首先会通过RegExp构造函数将其转换为正则表达式语法大全式search不支持全局搜索,它会忽略global标识

str.replace(exp, replaceStr)第一个参数是一个正则表达式语法大全式,第二个参数是要替换成的字符串如果exp带有global标识,那么源字符str中所有与exp表達式匹配的子串都会被替换如果不带g,str中仅第一个与exp匹配的子串会被替换

replaceStr中如果出现$加数字N的字符串,表示第N个子表达式相匹配的文夲

str.match(exp)返回一个由匹配结果组成的数组。

该数组不同于RegExp实例方法exex()返回的数组当有global标识时,match返回全局匹配到的所有字符串组成的数组;当没囿global标识时match就返回第一个匹配到的字符串组成的单元素数组。

match方法不会返回捕获性组合匹配到的子串(...)分组匹配在match方法中不会像RegExp实例方法exec()┅样返回匹配的子串。

当split方法传入的参数为正则表达式语法大全式时这使得split()方法异常强大。例如可以指定分隔符,允许两边可以留有任意多的空白符:


}

我要回帖

更多关于 正则表达式语法大全 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信