正则表达式语法入门

来源:互联网 发布:淘宝金牌店铺联盟 编辑:程序博客网 时间:2024/06/05 02:18

正则表达式看不懂?本文介绍简单的正则表达式语法和几个简单的要点,帮助初学者来认识它。

首先是特殊字符的说明(看不懂没关系,下面会有解释):
特别字符描述$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。[标记一个中括号表达式的开始。要匹配 [,请使用 \[。?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。{标记限定符表达式的开始。要匹配 {,请使用 \{。|指明两项之间的一个选择。要匹配 |,请使用 \|。要点一:注意三个字符的区分*\+\?

如e(abc)*这样的表达式能匹配的字符串最短是e,即*前面的表示式可以不出现,但如果是e(abc)+的话,最短匹配的字符串就是eabc了,即+前面的子表达式至少出现一次,其他的匹配还有eabcabc、eabcabcabc等。相应的e(abc)?这样的表达式,只能匹配eabc和e。

要点二:三种括号的区别

小括号表示一个表达式,如(0-9)匹配字符串"0-9";但这里如果换成中括号[0-9]则表示一个0到9的字符,比如0、1、2……,有多种匹配情况。大括号没有{0-9}这样的写法,通常用来表示匹配的长度,比如a{3,5}可以匹配aaa、aaaa、aaaaa,即表示长度为3到5的a字符串。

要点三:转义字符的使用

转义字符就是‘\’,比如一个字符串为abcd{ooo},用正则表达式可以表示为abcd\{o{3}\},o{3}表示三个o,但转义字符后面的符号就没有了特殊字符的含义,而可以作为普通字符使用。

有些诸如空格、回车这样看不见的东西也是通过转义字符来实现:

字符描述\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符。\f匹配一个换页符。等价于 \x0c 和 \cL。\n匹配一个换行符。等价于 \x0a 和 \cJ。\r匹配一个回车符。等价于 \x0d 和 \cM。\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。\S匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。\t匹配一个制表符。等价于 \x09 和 \cI。\v匹配一个垂直制表符。等价于 \x0b 和 \cK。到现在为止,其实第一个表中还有一些需要进一步解释举例的内容,引出本文的最后一个部分,定位符:

字符描述^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。\b匹配一个字边界,即字与空格间的位置。\B非字边界匹配。

看看,有了这些定位符,我们就可以匹配诸如“work”、“apple”这样的独立单词了,因为定位符可以标记字符串的边界。

举几个例子就很清楚了。比如“^a[0-9]b$”,匹配以a开头、以b结尾、中间为一位数字的字符串,它可以匹配a0b、a4b、a5b等,但不能匹配c4b、a4d、e4t之类的内容。

要点四:\B和\b的区别

当我们需要找以app开头的字符串时,可以用“\bapp”来匹配,这样中间或结尾出现“app”的字符串就不会被匹配到。

\B的作用与\b相反,但又有不同。\Bapp表示app出现在单词非边界的位置,这时“\Bapp”和“app\B”是一样的。但“app\b”和“\bapp”不同,它只能匹配以app为结尾的单词。

要点五:^的不同含义

前面说到^表示字符串的开头位置,但在中括号表达式中它的意思就不一样了。比如“[^a]”匹配一个不是a的字符,它可以是除a以外的任何字符。

参考:

本文表格来自菜鸟教程。