正则表达式语句大全

来源:互联网 发布:java实现语音聊天 编辑:程序博客网 时间:2024/05/02 20:46
正则表达式中的特殊字符:
字符含意\

做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。
-或-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。

^匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"$匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A"*匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa+匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa?匹配前面元字符0次或1次,/ba*/将匹配b,ba(x)匹配x保存x在名为$1...$9的变量中x|y匹配x或y{n}精确匹配n次{n,}匹配n次以上{n,m}匹配n-m次[xyz]字符集(character set),匹配这个集合中的任一一个字符(或元字符)[^xyz]不匹配这个集合中的任何一个字符[\b]匹配一个退格符\b匹配一个单词的边界\B匹配一个单词的非边界\cX这儿,X是一个控制符,/\cM/匹配Ctrl-M\d匹配一个字数字符,/\d/ = /[0-9]/\D匹配一个非字数字符,/\D/ = /[^0-9]/\n匹配一个换行符\r匹配一个回车符\s匹配一个空白字符,包括\n,\r,\f,\t,\v等\S匹配一个非空白字符,等于/[^\n\f\r\t\v]/\t匹配一个制表符\v匹配一个重直制表符\w匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配"$5.98"中的5,等于[a-zA-Z0-9]\W匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。正则表达式的直接量字符:
字符匹配
________________________________
字母数字字符 自身
\ f 换页符
\ n 换行符
\ r 回车
\ t 制表符
\ v 垂直制表符
\ / 一个 / 直接量
\ \ 一个 \ 直接量
\ . 一个 . 直接量
\ * 一个 * 直接量
\ + 一个 + 直接量
\ ? 一个 ? 直接量
\ | 一个 | 直接量
\ ( 一个 ( 直接量
\ ) 一个 ) 直接量
\ [ 一个 [ 直接量
\ ] 一个 ] 直接量
\ { 一个 { 直接量
\ } 一个 } 直接量
\ XXX 由十进制数 XXX 指 定的ASCII码字符
\ Xnn 由十六进制数 nn 指定的ASCII码字符
\ cX 控制字符^X. 例如, \cI等价于 \t, \cJ等价于 \n

如果想在正则表达式中使用特殊的标点符号,必须在它们之前加上一个 "\"

2.字符类

将单独的直接符放进中括号内就可以组合成字符类.一个字符类和它所包含的任何一个字符都匹配,所以正则表达式/ [abc] / 和字母 "a" , "b" , "c" 中的任何一个
都匹配.另外还可以定义否定字符类,这些类匹配的是除那些包含在中括号之内的字符外的所有字符.定义否定字符尖时,要将一个^ 符号作为从左中括号算起的第
一个字符.正则表达式的集合是 /[a-zA-z0-9] / .

由于某些字符类非常常用,所以JavaScript的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如,\s 匹配的是空格符,制表符和其它空白符, \s
匹配的则是空白符之外的任何字符.

正则表达式的字符类
字符 匹配
____________________________________________________
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换行符之外的任意字符,等价于[^\n]
\w 任何单字字符, 等价于[a-zA-Z0-9]
\W 任何非单字字符,等价于[^a-zA-Z0-9]
\s 任何空白符,等价于[\ t \ n \ r \ f \ v]
\S 任何非空白符,等价于[^\ t \ n \ r \ f \ v]
\d 任何数字,等价于[0-9]
\D 除了数字之外的任何字符,等价于[^0-9]
[\b] 一个退格直接量(特例)


3.复制

用以上的正则表式的语法,可以把两位数描述成 / \ d \ d /,把四位数描述成 / \d \ d \ d \ d/.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个

字符串.这个串由三个字符以及跟随在字母之后的一位数字构成.这些复杂的模式使用的正则表达式语法指定了该表达式中每个元素要重复出现的次数.

指定复制的字符总是出现在它们所作用的模式后面.由于某种复制类型相当常用.所以有一些特殊的字符专门用于表示它们.例如:+号匹配的就是复制前一模式一次

或多次的模式.下面的表列出了复制语法.先看一个例子:

/\d{2, 4}/ //匹配2到4间的数字.

/\w{3} \d?/ //匹配三个单字字符和一个任意的数字.

/\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格.

/[^"] * / //匹配零个或多个非引号字符.


正则表达式的复制字符

字符 含义
__________________________________________________________________
{n, m} 匹配前一项至少n次,但是不能超过m次
{n, } 匹配前一项n次,或者多次
{n} 匹配前一项恰好n次
? 匹配前一项0次或1次,也就是说前一项是可选的. 等价于 {0, 1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次.等价于{0,}


5.指定匹配的位置

我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: \s匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为

0的空间,而不是实际的字符例如: \b 匹配的是一个词语的边界,也就是处于一个/w字字符和一个\w非字字符之间的边界.像\b这样的字符并不指定任何一个匹配了的

字符串中的字符,它们指定的是匹配所发生的合法位置.有时我们称这些元素为正则表达式的锚.因为它们将模式定位在检索字符串中的一个特定位置.最常用的锚元

素是 ^, 它使模式依赖于字符串的开头,而锚元素$则使模式定位在字符串的末尾.

例如:要匹配词 "javascript" ,我们可以使用正则表达式 /^ javascript $/. 如果我们想检索 "java"这个词自身 (不像在 "javascript" 中那样作为前缀),那么我们可以使

用模式 /\s java \s /, 它要求在词语java之前和之后都有空格.但是这样作有两个问题.第一: 如果 "java"出现在一个字符的开头或者是结尾.该模式就不会与之匹配,除

非在开头和结尾处有一个空格. 第二:当这个模式找到一个与之匹配的字符时,它返回的匹配的字符串前端和后端都有空格,这并不是我们想要的.因此,我们使用词语

的边界 \b 来代替真正的空格符 \s 进行匹配. 结果表达式是 /\b java \b/.
下面是正则表达式的锚字符:


字符 含义
____________________________________________________________________
^ 匹配的是字符的开头,在多行检索中,匹配的是一行的开头
$ 匹配的是字符的结尾,在多行检索中,匹配的是一行的结尾
\b 匹配的是一个词语的边界.简而言之就是位于字符\w 和 \w之间的位置(注意:[\b]匹配的是退格符)
\B 匹配的是非词语的边界的字符