字符优先级
相同优先级的从左到右进行运算,不同优先级的运算先高后低。
字符 | 描述 | 优先级 |
---|---|---|
\ | 转义符 | 高 |
(), (?😃, (?=), [] | 圆括号和方括号 | |
*, +, ?, {n}, {n,}, {n,m} | 限定符 | |
^, $, \任何元字符、任何字符 | 定位点和序列(即:位置和顺序) | |
| | 替换,“或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。 | 低 |
元字符
字符 | 描述 | 类型 |
---|---|---|
\ | 将下个字符标记为特殊字符/原义字符/向后引用/八进制 例:‘n’匹配"n"、’\n’匹配换行符、’\\'匹配"\"、"\(" 则匹配 “(” | 转义符 |
^ | 匹配输入字符串的开始位置 如设置了 RegExp 对象的 Multiline 属性,也匹配’\n’或’\r’之后的位置 除了在方括号表达式中使用,此时它表示不接受该字符集合 | 定位符 |
$ | 匹配输入字符串的结束位置 如果设置了RegExp 对象的 Multiline 属性,匹配’\n’或’\r’之前的位置 | 定位符 |
* | 匹配前面的子表达式零次或多次 例如,zo* 能匹配 “z” 以及 “zoo”。等价于{0,} | 限定符 |
+ | 匹配前面的子表达式一次或多次 例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。等价于 {1,} | 限定符 |
? | 匹配前面的子表达式零次或一次 例如,“do(es)?” 可以匹配 “do” 或 “does” 。等价于 {0,1} | 限定符 |
{n} | n 是非负整数。匹配确定的 n 次 例: 'o{2}‘不能匹配"Bob"中的’o’,但能匹配"food"中的两个 o | 限定符 |
{n,} | n 是一个非负整数。至少匹配n 次 例: ‘o{2,}‘不能匹配"Bob"中的’o’,但能匹配"foooood"中的所有 o ’o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’ | 限定符 |
{n,m} | 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、\r)之外的任何单个字符 要匹配包括 ‘\n’ 在内的任何字符,请使用"(.|\n)" | |
(pattern) | 匹配 pattern 并捕获结果。结果从产生的 Matches 集合得到, 在 VBScript 中用 SubMatches 集合,在 JScript 中用 $0…$9 属性 | 捕获组 |
(?:pattern) | 匹配 pattern 但不捕获结果 在使用"|"字符来组合一个模式的其中一部分是很有用的 例: 'industr(?:y|ies) 比 ‘industry|industries’ 更简略 | 非捕获 |
(?=pattern) | 正向肯定预查(look ahead positive assert) 在任何匹配pattern的字符串开始处匹配查找字符串 不捕获结果 例: "Windows(?=95|98|NT|2000)" 匹配"Windows2000"中的"Windows" 不匹配"Windows3.1"中的"Windows" 预查不消耗字符,即在不包含预查结果的位置开始下一次搜索 | 非捕获 |
(?!pattern) | 正向否定预查(negative assert) 在任何不匹配pattern的字符串开始处匹配查找字符串 不捕获结果 例: "Windows(?!95|98|NT|2000)" 匹配"Windows3.1"中的"Windows" 不匹配"Windows2000"中的"Windows" 预查不消耗字符(同上解释) | 非捕获 |
(?<=pattern) | 反向肯定预查(look behind) 与正向肯定预查类似,只是方向相反 例: “(?<=95|98|NT|2000)Windows" 匹配"2000Windows"中的"Windows" 不匹配"3.1Windows"中的"Windows” | 非捕获 |
(?<!pattern) | 反向否定预查 与正向否定预查类似,只是方向相反 例: “(?<!95|98|NT|2000)Windows" 匹配"3.1Windows"中的"Windows" 不匹配"2000Windows"中的"Windows” | 非捕获 |
x|y | 匹配 x 或 y 例: ‘z|food’ 能匹配 “z” 或 “food” ’(z|f)ood’ 则匹配 “zood” 或 “food” | |
[xyz] | 字符集合。匹配所包含的任意一个字符 例: ‘[abc]’ 匹配 “plain” 中的 ‘a’ | |
[^xyz] | 负值字符集合。匹配未包含的任意字符 例: ‘[^abc]’ 匹配 “plain” 中的’p’、‘l’、‘i’、‘n’ | |
[a-z] | 字符范围。匹配指定范围内的任意字符 例: ‘[a-z]’ 匹配’a’到’z’范围内的任意小写字母字符 | |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符 例: '[^a-z]'可以匹配任何不在’a’到’z’范围内的任意字符 | |
\b | 匹配一个单词边界,也就是指单词和空格间的位置 例: ‘er\b’匹配"never"中的 ‘er’,但不匹配"verb"中的’er’ | 定位符 |
\B | 匹配非单词边界 ’er\B’匹配"verb"中的’er’,但不匹配"never"中的’er’ | 定位符 |
\cx | 匹配由 x 指明的控制字符 例: \cM 匹配一个 Control-M 或回车符 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为原义的’c’字符 | |
\d | 匹配一个数字字符。等价于 [0-9] | |
\D | 匹配一个非数字字符。等价于 [^0-9] | |
\f | 匹配一个换页符。等价于 \x0c 和 \cL | |
\n | 匹配一个换行符。等价于 \x0a 和 \cJ | |
\r | 匹配一个回车符。等价于 \x0d 和 \cM | |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等 等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符 | |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v] | |
\t | 匹配一个制表符。等价于 \x09 和 \cI | |
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK | |
\w | 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’ | |
\W | 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’ | |
\xn | 匹配 n,其中 n 为十六进制转义值 十六进制转义值必须为确定的两个数字长 例: ‘\x41’ 匹配 “A”。’\x041’ 则等价于 ‘\x04’ & "1" 正则表达式中可以使用 ASCII 编码 | |
\num | 匹配 num,其中 num 是一个正整数 是对所获取的匹配的引用 例: ‘(.)\1’ 匹配两个连续的相同字符 | |
\n | 标识一个八进制转义值或一个向后引用 如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用 否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 | |
\nm | 表示 八进制转义值 或 向后引用 1其之前至少有 nm 个获得子表达式,则 nm 为向后引用 2其之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用 3若 n 和 m 均为八进制数字 (0-7),则将匹配八进制转义值 nm | |
\nml | 如 n 为八进制数字 (0-7) 且 m 和 l 均为八进制数字 (0-7) 则匹配八进制转义值 nml | |
\un | 匹配 n,其中 n 是用4个十六进制数字表示的 Unicode 字符 例: \u00A9 匹配版权符号(©) |
字符簇
字符簇 | 描述 |
---|---|
[a-z] | 匹配所有的小写字母 |
[A-Z] | 匹配所有的大写字母 |
[a-zA-Z] | 匹配所有的字母 |
[0-9] | 匹配所有的数字 |
[0-9.-] | 匹配所有的数字,句号和减号 |
[ \f\r\t\n] | 匹配所有的白字符 |
[^a-z] | 除了小写字母以外的所有字符 |
[^\/^] | 除了()(/)(^)之外的所有字符 |
[^"’] | 除了双引号(")和单引号(’)之外的所有字符 |
PHP的正则表达式内置的通用字符簇
字符簇 | 描述 |
---|---|
[[:alpha:]] | 任何字母 |
[[:digit:]] | 任何数字 |
[[:alnum:]] | 任何字母和数字 |
[[:space:]] | 任何空白字符 |
[[:upper:]] | 任何大写字母 |
[[:lower:]] | 任何小写字母 |
[[:punct:]] | 任何标点符号 |
[[:xdigit:]] | 任何16进制的数字,相当于[0-9a-fA-F] |
确定重复出现
字符簇 | 描述 |
---|---|
^[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} | 所有的两个字符 |
^[a-zA-Z0-9_]{1,}$ | 所有包含一个以上的字母、数字或下划线的字符串 同^[a-zA-Z0-9_]+$ |
^[1-9][0-9]{0,}$ | 所有的正整数 同^[1-9][0-9]*$ |
^-{0,1}[0-9]{1,}$ | 所有的整数 同^-?[0-9]+$ |
^[-]?[0-9]+.?[0-9]+$ | 所有的浮点数 同^[-]?[0-9]+(.[0-9]+)?$ |
示例
正则表达式 | 描述 |
---|---|
/\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后面开始进行下一次的检索匹配 |
/^\s*$/ | 匹配空行 |
/\d{2}-\d{5}/ | 验证由两位数字、一个连字符再加 5 位数字组成的 ID 号 |
/<\s*(\S+)(\s[^>]*)?>[\s\S]*<\s*/\1\s*>/ | 匹配 HTML 标记 |
实用示例
正则表达式 | 匹配描述 |
---|---|
/^[0-9]+([.][0-9]+){0,1}$/ | 整数或者小数 |
/^[0-9]*$/ | 只能输入数字 |
/^\d{n}$/ | 只能输入n位的数字 |
/^\d{n,}$/ | 只能输入至少n位的数字 |
/^\d{m,n}$/ | 只能输入m~n位的数字 |
/^(0|[1-9][0-9]*)$/ | 只能输入零和非零开头的数字 |
/^[0-9]+(.[0-9]{2})?$/ | 只能输入有两位小数的正实数 |
/^[0-9]+(\.[0-9]{1,3})?$/ | 只能输入有1~3位小数的正实数 |
/^\+?[1-9][0-9]*$/ | 只能输入非零的正整数 |
/^\-[1-9][0-9]*$/ | 只能输入非零的负整数 |
/^[a-z]+$/ | 只能输入由26个小写英文字母组成的字符串 |
/^[A-Z]+$/ | 只能输入由26个大写英文字母组成的字符串 |
/^[A-Za-z]+$/ | 只能输入由26个英文字母组成的字符串 |
/^[A-Za-z0-9]+$/ | 只能输入由数字和26个英文字母组成的字符串 |
/^[\u4e00-\u9fa5]{0,}$/ | 只能输入汉字 |
/[^\x00-\xff]/ | 双字节字符(包括汉字在内) |
/^.{3}$/ | 只能输入长度为3的字符 |
/[%&’,;=?$\\^]+/ | 是否含有^%&’,;=?$\"等字符 |
/^\s*|\s*$/ | 首尾空白字符 |
/\n\s*\r/ | 空白行 |
/<(\S*?)[^>]*>.*?</>|<.*? />/ | HTML标记。能匹配部分,复杂的嵌套不行 |
/^[a-zA-Z]\w{5,15}$/ | 验证用户名和密码.格式:"[A-Z][a-z]_[0-9]"组成,并且第一个字必须为字母6~16位 |
/^[a-zA-Z][a-zA-Z0-9_]{4,15}$/ | 验证帐号是否合法 (字母开头,允许5-16字节,允许字母数字下划线) |
/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ | 验证Email地址 |
/\d{14}[[0-9],0-9xX]/ | 验证15位身份证号 |
/\d{17}(\d|X|x)/ | 验证18位身份证号 |
/^(\d{3,4}-)\d{7,8}$/ | 验证电话号码.格式:xxx/xxxx-xxxxxxx/xxxxxxxx |
/^1([38][0-9]|4[5-9]|5[0-3,5-9]|66|7[0-8]|9[89])[0-9]{8}$/ | 验证手机号码(包含虚拟号码和新号码段) |
/[1-9][0-9]{4,}/ | 腾讯QQ号 |
/^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/ | 验证URL |
/[a-zA-z]+://[^\s]*/ | 网址URL |
/([1-9]{1,3}\.){3}[1-9]/ | ip地址 |
/([A-Fa-f0-9]{2}😃{5}[A-Fa-f0-9]/ | MAC地址 |
/[1-9]\\d{5}(?!\d)/ | 中国邮政编码 |
/"^(0?[1-9]|1[0-2])$"/ | 一年的12个月。“01"~"09"和"10"~"12” |
/"^((0?[1-9])|((1|2)[0-9])|30|31)$"/ | 一个月的31天.正确格式为:“01"~"09”、“10"~"29"和"30”~“31” |
/\\d{4}[年|\-|\.]\d{\1-\12}[月|\-|\.]\d{\1-\31}日?/ | 大多数年月日信息 |