本文介绍正则表达式中一些常用的语法。
普通字符匹配即,一般文本编辑器,或者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。

(完)。