日期:2021年8月3日标签:DeveloperHandbook

正则表达式 #

本文介绍正则表达式中一些常用的语法。

一.普通字符 #

普通字符匹配即,一般文本编辑器,或者windows记事本支持的字符匹配,可以匹配单个字符,也可以匹配多个连续字符匹配。

regex

示例中斜杠中间的字符串表示需要匹配的正则表达式。上面的代码表示匹配Text字符串。使用连续字符串时,也支持空格匹配。

正则表达式

二.特殊字符 #

正则表达式提供了一些特殊字符:\ | ^ $ . ? * + ( ) [ {,来增强字符串匹配的功能。

1.\ #

\表示转义。如果想要匹配文本中的\ | ^ $ . ? * + ( ) [ {这些特殊字符,需要在这些字符前面添加\进行转义后,才可以正确匹配。

正则表达式

+无法正确匹配文档中的+

正则表达式

添加\后,正则表达式可以正确进行匹配。

反斜杠\不应该用于普通字符前面,例如\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

2. | #

|表示选择操作符(或操作符),匹配符号两侧中的任意一侧。例如abc|def会匹配abc或者def

正则表达式

3. $ #

$用法和反斜杠加上数字用法一样,表示引用前面的括号中匹配的内容。

$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"

4. ? #

匹配前面的字符0次或者1次。例如a?b会匹配ab或者b

5. * #

匹配前面的字符0次或者多次。例如a*b会匹配babaabaaab等等。

6.+ #

*类似,匹配前面的字符1次或者多次。例如a*b会匹配 abaabaaab等等,但是不会匹配b

7. () #

()两个操作符需要配合使用,表示强结合的意思,前面讲述过该用法。

8. [] #

[]配合使用,表示一个字符类,后面会介绍。

9. { #

大部分支持正则表达式的编辑器,都将{视作普通字符,只有当{}成对出现的情况下,{}这个会构成一个重复操作符。

正则表达式

(ab){2}表示将(ab)重复两次。

三.不可打印字符 #

正则表达式匹配
\t匹配一个tab字符
\n匹配一个换行符
\r匹配一个回车符
\v匹配一个垂直制表符

四.字符类 #

前面提到过,[]配合使用,表示一个字符类。字符类表示匹配一组字符中的某个单个字符,例如[abc]表示匹配ab或者c

正则表达式

1. 连字符- #

可以字符类中使用-,表示一个连续的范围。例如[0-9]等价于[0123456789],匹配0到9之间任意一个数字:

正则表达式

也支持字母范围[a-d]

正则表达式

大写字母范围[A-D]

正则表达式

一些特殊字符在字符类中不需要转义即可进行匹配:

正则表达式

\-[]这些特殊字符在字符类中需要转义才可以进行匹配:

正则表达式

五.反字符类 #

反字符类功能与字符类功能正好相反,表示不匹配其中任何一个字符。只需要在[后添加^即可形成反字符类。

正则表达式

[^a-c]表示匹配除a、b、c的任意一个字符(不匹配a、b、c)。

六.向前引用和向后引用 #

1.正向前引用 #

如果你需要找到某个字符,这个字符后面必须跟着某个字符或者某个字符串,此时需要使用正向前引用。语法为(?=指定字符或字符串)。例如你想找到一个qq需要满足其后必须紧跟着字母u

正则表达式

2. 反向前引用 #

反向前引用表示匹配某个字符,后面没有指定字符。语法为(?!指定字符或字符串) 例如你想找到一个q后面没有紧跟着字母u

正则表达式

3.正向后引用 #

向后引用与向前引用类似,不过是针对某个字符前面的字符的操作。正向后引用表示要匹配某个字符,这个字符前面必须是某个指定字符或者字符串,语法为(?<=指定的字符或者字符串)。例如查找字符aa前面必须要字母z

正则表达式

4.反向后用引用 #

反向后引用,匹配某个字符,该字符前面不能是某个指定字符或字符串,语法为(?<!指定的字符或者字符串)。例如要朝招字符aa前面不能是字母z

正则表达式

(完)。

目录