美文网首页
正则表达式语法

正则表达式语法

作者: 吃饭饭还有睡觉觉 | 来源:发表于2017-11-24 20:19 被阅读0次

正则表达式是由元字符和普通字符组成。所谓元字符就是类似于“*”、“?”之类的有意义的字符,所谓的普通字符就是字符串中常用的字符。将普通字符和元字符放在一对斜杠(/)中,就可以组成一个正则表达式。

1、匹配字符

最简单的正则表达式就是字符本身的匹配,这种匹配方法相当于精确查找。

比如:/abc/  ,可以匹配到字符串“abc”(注意是匹配到字符串“abc”,不是单个字符“a”或“b”或“c”);

正则表达式中有很多字符有特殊意义,要匹配单个的字符(比如“?”),需要在转义字符前加上反斜杠“\”,

正则表达式中有很多转义字符:“\!”,“\$”,“\^”,“\*”,“\+”,“\=”,“\|”,“\.”,“\?”,“\\”,“\/”,“\(”,“\)”,“\[”,“\]”,“\{”,“\}”,“\o”,“\t”,“\n”,“\v”,“\f”,“\r”,“\xnn”,“\uxxxx”,“\cX”。

2、字符类

字符类在正则表达式中可以代表一系列字符,而不是只能代表一个字符或一个子字符串,字符串类是以中括号作为分界符的。

比如:/[ABC]/   ,可以匹配到“A”或“B”或“C”单个字符;假如要匹配的字符串为“JAVASCRIPT”,只会匹配到第一个“A”(因为除非使用全局模式标志,在完成第一次匹配后不会再进行后面的匹配了);

使用字符类还可以制定一系列字符:/[A-Z]/  //可以匹配到字母A到Z,/[a-z]/  //可以匹配到字母a到z,/[A-Za-z]/  //可以匹配到字母A到Z和字母a到z,/[0-9]/  //可以匹配到数字0到9,/[A-Za-z0-9]/  //可以匹配到字母A到Z、字母a到z、数字0到0,/[A-D159]/  //可以匹配到字母A到D和数字1、5、9;

除了要将匹配的字符放在[]中外,字符类还定义了一些特殊的字符,可以更加灵活地匹配到字符串;比如:字符类“XYZ”:字符集,可以匹配到中括号中的字符;字符类“^”:非字符集,可以匹配到非中括号中的任何字符;字符类“.”:匹配除了答行符和其他Unicode行符之外的所有字符;字符类“\w”:匹配任何ASCII单字字符,相当于[a-zA-Z0-9];字符类“\W”:匹配到所有ASCII单字字符之外的字符,相当于[^a-zA-Z0-9];字符类“\s”:匹配任何Unicode空白符,相当于[\f\n\r\t\v\u00A0\u2028\u2029];字符类“\S”:匹配任何Unicode空白符之外的字符相当于[^\f\n\r\t\v\u00A0\u2028\u2029];字符类“\d”:匹配任何数字,相当于[0-9];字符类“\D”:匹配任何数字之外的字符,相当于[^0-9]。

3、界定符

假设有一个字符串内容为“BaaaaaBaaaaaB”,要求匹配到第一个“B”和最后一个“B”,则可以使用界定符;

界定符“^”可以匹配到一行字符的开头,“/^B/”可以匹配到第一个“B”;界定符“$”可以匹配到一行字符的结尾,“/B$/”可以匹配到最后一个“B”;

更多界定符:界定符“^”:匹配行首,多用于多行文本搜索;界定符“$”:匹配行尾,多用于多行文本搜索;界定符“\b”:匹配单词的边界,多用于英文文本;界定符“\B”:与\b相反,匹配到一个非单词的边界。

4、选择符

假设要在一个字符串中查找子字符串A和子字符串B,在正则表达式中用一个选择符“|”,使用这个选择符可以匹配多个子字符串;例如字符串1“AAAaaaaaaaBBB”、字符串2“AAAaaaaaaa”、字符串3“BBBaaaaaaa”,使用/AAA|BBB/都可以去匹配;但是匹配字符串1的话,只会匹配到AAA,因为除非使用全局模式标志,在完成第一次匹配后不会再进行后面的匹配了,包括字符和字符类以及所有的匹配方式都是这样。

5、重复类

字符类都只能匹配一个字符,如“[0-9]”只能匹配数字0到9,如果要匹配数字10到99就不行了;正则表达式提供了重复类来匹配这种重复的现象;比如重复类“{n}”可以将前一项重复n次;

/[\d]{2}/      将“[\d]”重复两次,相当于“/[\d][\d]/”

/ab{2}/      将“b”重复两次,相当于“/abb/”

在正则表达式“/[\d]{2}/”中可以匹配到00到99之间的数字,但如果0到99之间的数字需要用“/[\d]|[\d]{2}/”

/[\d]{1,3}/      将“[\d]”重复1到3次,相当于“/[\d]/”或“/[\d][\d]/”或“/[\d][\d][\d]/”

/ab{1,3}/      将“b”重复1到3次,相当于“/ab/”或“/abb/”或“/abbb/”

更多重复类:1、{n}:匹配前一项n次;2、{n,m}:匹配前一项n到m次;3、{n,}:匹配前一项至少n次;4、?:酦醅前一项0次或者1次,相当于{0,1};5、+:匹配前一项至少1次,相当于{1,};6、*:匹配前一项0次货多次,相当于{0,};

6、分组

假设要匹配字符串“java”或“javascript”,除了选择符,还可以使用小括号将字符串分组来实现,分了组的字符串可以看成一个整体;

比如:/java(script)?/,“script”被小括号括起来视为一个整体,又因为重复类“?”会将整个“script”重复0次或者1次,所以可以匹配字符串“java”或“javascript”。

7、引用

在正则表达式中,会给每一个分组分配一个编号,使用编号可以将匹配到的内容在正则表达式中作进一步的处理;编号方式为:从正则表达式左侧开始,第一个分组编号为1,第二个为2,以此类推;

分组编号后,可以使用“\n”来引用分组匹配的字符串;如“\1”位第一个分组匹配的字符串;/(java)?Script\1:,该正则表达式可以匹配到“javascriptjava”或“script”;

在某些情况下,可能要将匹配到的字符串分组,但不记录该组匹配的字符串,那么久可以使用“(?)”符号类进行分组,比如:/(?:java){0,1}(Script){0,1}\1/,可以匹配到“java”或“JavaScriptScript”。

8、其他匹配

正则表达式中海油两种选择性匹配:

x(?=y):只有x后面紧跟着y才匹配;

x(?!y):只有x后面不是y才匹配。

9、匹配规则

正则表达式在匹配字符串时,只要遇上可以匹配的内容就会停止匹配;如果想要继续匹配的话,就必须在正则表达式后加上标志符“g”,如/a/g;

更多标志符:1、i:匹配时不区分大小写;2、g:匹配能匹配的所有字符,而不是在匹配第一个后就停止匹配;3、m:执行多行匹配模式,也就是使用“^”和“$”来匹配开头和结尾。

相关文章

网友评论

      本文标题:正则表达式语法

      本文链接:https://www.haomeiwen.com/subject/dpjtbxtx.html