正则表达式

元字符

|---------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 字符 | 描述 |
| \ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。例如'\n'匹配一个换行符,'\\'匹配'\','\('匹配'('。 |
| ^ | 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r'之后的位置。 |
| $ | 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配'\n'或'\r'之前的位置。 |
| * | 匹配前面的子表达式零次或多次。例如,zo*能匹配'z'以及'zoo'。 |
| + | 匹配前面的子表达式一次或多次。例如,zo+能匹配'zo'以及'zoo',但不能匹配'z'。 |
| ? | 匹配前面的子表达式零次或一次。例如,'do(es)?'匹配'do'或'does'。 |
| {n} | n是一个非负整数,匹配确定的n次。例如,'o{2}'不能匹配'Bob'中的'o',但可以匹配'food'中的'o'。 |
| {n,} | n是一个非负整数,至少匹配n次。例如,'o{2,}'不能匹配'Bob'中'o',但能匹配'foooood'中的'o'。 |
| {n,m} | n,m均为非负整数,且n<=m,至少匹配n次且至多匹配m次。 |
| ? | 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串'ooooo','o+?'将匹配单个'o',而'o+'将匹配所有'o'。 |
| . | 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括'\n'在内的任何字符,请使用像'(.|\n)'的模式。 |
| (pattern) | 匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到。 |
| (?:pattern) | 匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用"或"字符"|"来组合一个模式的各个部分时很有用。例如,'industr(ies|y)'就是比'industries|industry'更简略的表达式。 |
| (?=pattern) | 正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配'Windows2000'中的"Windows",但不能匹配'Windows3.1'中的'Windows'。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。 |
| (?!pattern) | 正向否定预查(look ahead 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匹配一个Ctrl+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]。 |
| \S | 匹配任何非空白字符。等价于[^\f\n\r\t\v]。 |
| \t | 匹配一个制表符。等价于\x09和\cI。 |
| \v | 匹配一个垂直制表符。等价于0x0b和\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 | 标识一个八进制转义值或一个后向引用。如果\nm之前至少有nm个获得子表达式,则nm为后向引用。如果\nm之前至少有n个获取,则n为一个后跟字符m的后向引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。 |
| \nml | 如果n八进制数字(0-3),且m和l分别为八进制数字(0-7),则匹配八进制转义值nml。 |
| \un | 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如\u00A9表示匹配版权符号**©**。 |

运算符优先级

正则表达式从左到右进行计算,并遵循优先级顺序,这与算术运算符非常类似。

相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:

|-----------------------|---------------------------------------------------------------------------------|
| 运算符 | 描述 |
| \ | 转义符 |
| (),(?:),(?=),[] | 圆括号和方括号 |
| *,+,?,{n},{n,},{n,m} | 限定符 |
| ^,$,\任何元字符、任何字符 | 定位点和序列(即:位置和顺序) |
| | | 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用(m|f)ood |

相关推荐
Just_Paranoid2 天前
解析 Java 项目生成常量、变量和函数 Excel 文档
java·python·正则表达式·excel·javadoc
问道飞鱼2 天前
【知识科普】认识正则表达式
数据库·mysql·正则表达式
我码玄黄3 天前
正则表达式优化之算法和效率优化
前端·javascript·算法·正则表达式
Java编程乐园3 天前
Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】
java·正则表达式
好学近乎知o3 天前
正则表达式(学习Django过程中可能涉及的)
学习·正则表达式·django
SunnyRivers5 天前
基础爬虫案例实战
正则表达式·爬虫实战·多进程·requests
西洼工作室6 天前
【java 正则表达式 笔记】
java·笔记·正则表达式
kiss strong7 天前
正则表达式
正则表达式
Linux运维技术栈7 天前
Python字符串及正则表达式(十一):正则表达式、使用re模块实现正则表达式操作
开发语言·python·正则表达式
jackiendsc7 天前
Java中正则表达式的介绍、使用场景及示例代码
java·开发语言·正则表达式