本文介绍正则表达式中一些常用的语法。
普通字符匹配即,一般文本编辑器,或者windows记事本支持的字符匹配,可以匹配单个字符,也可以匹配多个连续字符匹配。
示例中斜杠中间的字符串表示需要匹配的正则表达式。上面的代码表示匹配Text
字符串。使用连续字符串时,也支持空格匹配。
正则表达式提供了一些特殊字符:\ | ^ $ . ? * + ( ) [ {
,来增强字符串匹配的功能。
\
#\
表示转义。如果想要匹配文本中的\ | ^ $ . ? * + ( ) [ {
这些特殊字符,需要在这些字符前面添加\
进行转义后,才可以正确匹配。
+
无法正确匹配文档中的+
。
添加\
后,正则表达式可以正确进行匹配。
反斜杠\
不应该用于普通字符前面,例如\d
,\d
不会匹配普通字符d
。实际上\d
是一个简写,它会匹配0-9之间任意一个数字。
\d
匹配0-9中任意一个数字。图中正则表达式斜杠后的g
表示全局匹配的意思,它会匹配下面文本中所有符合要求的字符串。
与\d
类似的还有:
\w
:匹配字母、数字、下划线,等价于[^A-Za-z0-9_]
。\s
:匹配任意的空白字符。\b
:匹配单词的开始或结束。数字前也可以添加斜杠,这种形式的特殊字符组需要和()
配合使用。
\1
和\2
分别表示第一个括号匹配的内容和第二个括号匹配的内容,所以(a)(b)\1\2
等价于abab
。
|
#|
表示选择操作符(或操作符),匹配符号两侧中的任意一侧。例如abc|def
会匹配abc
或者def
。
$
#$
用法和反斜杠加上数字用法一样,表示引用前面的括号中匹配的内容。
$0
匹配正则表达式全部字符串内容。
$1
引用正则表达式第一个括号中的表达式。
$2
引用正则表达式第二个括号中的表达式。以此内推....
这个符号还有另一个好处,就是用于替换。以JavaScript代码为例:
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
console.log(newstr);
// 程序将会打印:"Smith, John"
?
#匹配前面的字符0次或者1次。例如a?b
会匹配ab
或者b
。
*
#匹配前面的字符0次或者多次。例如a*b
会匹配b
、 ab
、aab
和aaab
等等。
+
#与*
类似,匹配前面的字符1次或者多次。例如a*b
会匹配 ab
、aab
和aaab
等等,但是不会匹配b
。
(
和)
#(
和)
两个操作符需要配合使用,表示强结合的意思,前面讲述过该用法。
[
和]
#[
和]
配合使用,表示一个字符类,后面会介绍。
{
#大部分支持正则表达式的编辑器,都将{
视作普通字符,只有当{
与}
成对出现的情况下,{}
这个会构成一个重复操作符。
(ab){2}
表示将(ab)重复两次。
正则表达式 | 匹配 |
---|---|
\t | 匹配一个tab字符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\v | 匹配一个垂直制表符 |
前面提到过,[
和]
配合使用,表示一个字符类。字符类表示匹配一组字符中的某个单个字符,例如[abc]
表示匹配a
、b
或者c
。
-
#可以字符类中使用-
,表示一个连续的范围。例如[0-9]
等价于[0123456789]
,匹配0到9之间任意一个数字:
也支持字母范围[a-d]
:
大写字母范围[A-D]
:
一些特殊字符在字符类中不需要转义即可进行匹配:
\
、-
、[
和]
这些特殊字符在字符类中需要转义才可以进行匹配:
反字符类功能与字符类功能正好相反,表示不匹配其中任何一个字符。只需要在[
后添加^
即可形成反字符类。
[^a-c]
表示匹配除a、b、c的任意一个字符(不匹配a、b、c)。
如果你需要找到某个字符,这个字符后面必须跟着某个字符或者某个字符串,此时需要使用正向前引用。语法为(?=指定字符或字符串)
。例如你想找到一个q
,q
需要满足其后必须紧跟着字母u
。
反向前引用表示匹配某个字符,后面没有指定字符。语法为(?!指定字符或字符串)
例如你想找到一个q
后面没有紧跟着字母u
。
向后引用与向前引用类似,不过是针对某个字符前面的字符的操作。正向后引用表示要匹配某个字符,这个字符前面必须是某个指定字符或者字符串,语法为(?<=指定的字符或者字符串)
。例如查找字符a
,a
前面必须要字母z
。
反向后引用,匹配某个字符,该字符前面不能是某个指定字符或字符串,语法为(?<!指定的字符或者字符串)
。例如要朝招字符a
,a
前面不能是字母z
。
(完)。