总览
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个八进制转义符 |
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的子表达式零次或多次 |
+ | 匹配前面的子表达式一次或多次 |
? | 匹配前面的子表达式零次或一次 |
{n} | n是一个非负整数,匹配确定的n次 |
{n,} | n是一个非负整数,至少匹配n次 |
{n,m} | n和m均为非负整数,其中n<=m.最少匹配n次且最多匹配m次 |
? | 当该字符紧跟在任何一个其他限制符,匹配模式是非贪婪的 |
. | 匹配除”.”之外的任何单个字符 |
x | y |
[xyz] | 字符集合,匹配所包含的任意一个字符 |
[^xyz] | 负值字符集合,匹配为包含的任意字符 |
[a-z] | 字符范围,匹配指定范围内的任意字符 |
[^a-z] | 负值字符范围,匹配任何不在指定范围内的任意字符 |
\b | 匹配一个单词边界 |
\B | 匹配非单词边界 |
\d | 匹配一个数字字符 |
\D | 匹配一个非数字字符 |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
基础语法
元字符
字符 | 描述 |
---|---|
. | 匹配除换行符以外的任意字符 |
^ | 匹配字符串的开始 |
& | 匹配字符串的结束 |
\b | 匹配一个单词的边界 |
\d | 匹配一个数字 |
\n | 匹配一个换行符 |
\r | 匹配一个回车 |
\s | 匹配任意的空白符 |
\w | 匹配、字母、下划线、数字或汉字 |
字符转义
如果想查找元字符本身的话,需要用’\’来取消这些元字符的含义。比如: 用C:\Windows匹配C:\Windows
重复
字符 | 描述 |
---|---|
* | 重复0次或多次 |
+ | 重复一次或多次 |
? | 重复0次货一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多次 |
{n, m} | 重复n到m次 |
字符类
如果你想匹配数字、字母、空白等等,非常简单,因为已经有定义好的元字符与其对应。但如果,需要匹配没有对应元字符定义的字符集合,该怎么办?
正则表达式中,用”[]”来列出这些需要匹配的字符集合。在”[]”中,不存在元字符都会以本身含义出现。比如用[.?!]匹配这三个符号的任意一个、用[a-z0-9A-Z_]匹配字母数字和下划线,也就等价于\w
分组
在字符后面加上限定符(*、+、{n,m}),可以重复单个字符。如果需要重复多个字符串,需要用到”()”将需要重复的字符串内容包裹起来。
分支条件
用”|”匹配两种情况,比如“0\d{2}-\d{8}|0\d{3}-\d{7}”能匹配两种横线分割的电话号码。
Java正则表达式
Java 的正则表达式在匹配点“.” 和斜杠”\“,表达式要分别写作 \\. 和 \\\\,难看些,不好理解。幸好还有些人记住了,匹配点(.) 或 {、[、(、?、$、^ 和 * 这些特殊符号要要前加双斜框,匹配 \ 时要用四斜杠。
Java对正则表达式的助理,都放在java.util.regex包里。该包下包含Pattern和Matcher两个类,另外还有PatternSyntaxException类,用以捕获正则语法错误。
1. Pattern对象是正则表达式已编译的版本。它没有公共构造器,通过传递一个正则表达式参数给公共静态方法compile来创建一个pattern对象。
2. Matcher用来匹配输入字符串和创建的pattern对象的正则引擎对象。这个类也没有公共构造器,通过pattern对象的matcher方法,传入输入字符串作为参数来获得一个Matcher对象。
3. 如果正则表达式语法不正确,将抛出PatternSyntaxException异常。
JavaScript正则表达式
JavaScript中的正则表达式用RegExp对象表示。可以通过使用RegExp()构造函数来创建。但更多的时候是通过一种特殊的直接量语法来创建
var pattern = /s$/;
正则表达式的直接量定义为包含在斜杠(“/”)之间的字符串。
修饰符
JavaScript的正则表达式有一个特殊的语法,即修饰符。修饰符并不放在两个斜杠(“/”)之间,而是放在它们之后。
修饰符 | 描述 |
---|---|
i | 执行不区分大小写的匹配 |
g | 执行一个全局匹配 |
m | 多行匹配模式 |