Flex正则表达式 学以致用 【总结版】
1.1 开始、结束符号(它们同时也属于定位符)
我们先从简单的开始。假设你要写一个正则表达式规则,你会用到 ^ 和 $ 符号,他们分别是行首符、行尾符。
例如: /^d+[0-9]?d+$/
1.2 句点符号
假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以 “t” 字母开头,以 “n” 字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符 —— 句点符号 “.” 。这样,完整的表达式就是 “t.n” ,它匹配 “tan” 、 “ten” 、 “tin” 和 “ton” ,还匹配 “t#n” 、 “tpn” 甚至 “t n” ,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、 Tab 字符甚至换行符:
1.3 方括号符号
为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号( “[]” )里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配 。也就是说,正则表达式 “t[aeio]n” 只匹配 “tan” 、 “Ten” 、 “tin” 和 “ton” 。但 “Toon” 不匹配,因为在方括号之内你只能匹配单个字符:
1.4 “ 或 ” 符号
如果除了上面匹配的所有单词之外,你还想要匹配 “toon” ,那么,你可以使用 “|” 操作符。 “|” 操作符的基本意义就是 “ 或 ” 运算 。要匹配 “toon” ,使用 “t(a|e|i|o|oo)n” 正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号 “()” 。
1.5 表示匹配次数的符号
表一:显示了表示匹配次数的符号,这些符号用来确定紧靠该符号左边的符号出现的次数:
代码
/
语法 说明
*
重复零次或更多次
+
重复一次或更多次
?
重复零次或一次
{n}
重复
n
次
{n,}
重复
n
次或更多次
{n,m}
重复
n
到
m
次
表二:常用符号
代码
/
语法 相当于
w [0-9A-Za-z_]
W [^0-9A-Za-z_]
s [tnrf]
S [^tnrf]
d [0-9]
D [^0-9]
表二中的符号意义:
· w 包括下划线的字母和数字。等同于 [0-9A-Za-z_] 。若为匹配多字节字符的正则表达式时,则也会匹配日语的全角字符。
· W 非字母和数字。 w 以外的单个字符。
· s 空字符。相当于 [ tnrf]
· S
非空字符。
[ tnrf]
以外的单个字符。
· d
数字。即
[0-9]
· D 非数字。 d 以外的单个字符
1.6 定位符介绍(用于规定匹配模式在目标对象中的出现位置)
较为常用的定位符包括:
“^”, “$”, “b”
以及
“B”
。其中,
“^”
定位符规定匹配模式必须出现在目标字符串的开头,
“$”
定位符规定匹配模式必须出现在目标对象的结尾,
b
定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一,而
“B”
定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内,即匹配对象既不能作为目标字符串的开头,也不能作为目标字符串的结尾。同样,我们也可以把
“^”
和
“$”
以及
“b”
和
“B”
看作是互为逆运算的两组定位符。举例来说:
/^hell/
因为上述正则表达式中包含
“^”
定位符,所以可以与目标对象中以
“hell”, “hello”
或
“hellhound”
开头的字符串相匹配。
/ar$/
因为上述正则表达式中包含
“$”
定位符,所以可以与目标对象中以
“car”, “bar”
或
“ar”
结尾的字符串相匹配。
/bbom/
因为上述正则表达式模式以
“b”
定位符开头,所以可以与目标对象中以
“bomb”,
或
“bom”
开头的字符串相匹配。
/manb/
因为上述正则表达式模式以
“b”
定位符结尾,所以可以与目标对象中以
“human”, “woman”
或
“man”
结尾的字符串相匹配。
为了能够方便用户更加灵活的设定匹配模式,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如:
/[A-Z]/
上述正则表达式将会与从
A
到
Z
范围内任何一个大写字母相匹配。
/[a-z]/
上述正则表达式将会与从
a
到
z
范围内任何一个小写字母相匹配。
/[0-9]/
上述正则表达式将会与从
0
到
9
范围内任何一个数字相匹配。
/([a-z][A-Z][0-9])+/
上述正则表达式将会与任何由字母和数字组成的字符串,如
“aB0”
等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用
“()”
把字符串组合在一起。
“()”
符号包含的内容必须同时出现在目标对象中。因此,上述正则表达式将无法与诸如
“abc”
等的字符串匹配,因为
“abc”
中的最后一个字符为字母而非数字。
如果我们希望在正则表达式中实现类似编程逻辑中的
“
或
”
运算,在多个不同的模式中任选一个进行匹配的话,可以使用管道符
“|”
。例如:
/to|too|2/
上述正则表达式将会与目标对象中的
“to”, “too”,
或
“2”
相匹配。
正则表达式中还有一个较为常用的运算符,即否定符
“[^]”
。与我们前文所介绍的定位符
“^”
不同,否定符
“[^]”
规定目标对象中不能存在模式中所规定的字符串。例如:
/[^A-C]/
上述字符串将会与目标对象中除
A
,
B
,和
C
之外的任何字符相匹配。一般来说,当
“^”
出现在
“[]”
内时就被视做否定运算符;而当
“^”
位于
“[]”
之外,或没有
“[]”
时,则应当被视做定位符。
最后,当用户需要在正则表达式的模式中加入元字符,并查找其匹配对象时,可以使用转义符
“”
。例如:
/Th*/
上述正则表达式将会与目标对象中的
“Th*”
而非
“The”
等相匹配。
三、正则表达式规则的例子
/^(d{3}-|d{4}-)?(d{8}|d{7})?$/ //
国内电话
/^[1-9]*[1-9][0-9]*$/ //
腾讯
QQ
/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/
//email
地址
/^[a-zA-Z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\s*)?$/
//url
/^d+$/
//
非负整数
/^[0-9]*[1-9][0-9]*$/
//
正整数
/^((-\d+)|(0+))$/
//
非正整数
/^-[0-9]*[1-9][0-9]*$/
//
负整数
/^-?\d+$/
//
整数
/^\d+(\.\d+)?$/
//
非负浮点数
/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/
//
正浮点数
/^((-\d+(\.\d+)?)|(0+(\.0+)?))$/
//
非正浮点数
/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
//
负浮点数
/^(-?\d+)(\.\d+)?$/
//
浮点数
/^[a-zA-Z]+$/
//
由
26
个英文字母组成的字符串
/^[a-z]+$/
//
由
26
个英文字母的大写组成的字符串
/^[a-z]+$/
//
由
26
个英文字母的小写组成的字符串
/^[a-za-z0-9]+$/
//
由数字和
26
个英文字母组成的字符串
/^\w+$/
//
由数字、
26
个英文字母或者下划线组成的字符串
下面总结一下基本的正则表达式的meta character以及它们含义:
. 匹配任意一个字符
$ 匹配一行的结尾
^ 匹配一行的开头(在[]里面表示否定)
{} 定义了一个范围
[] 定义了一个字符类
() 定义了一个组
* 前面出现0次以上
+ 前面匹配一次以上
? 前面出现0次或一次
\ 后面的字符不会看作metacharacter
\w 字母数字下划线
\W 非字母数字下划线
\d 单个数字
\D 单个非数字
| 或,二者之一
&& 与操作符
\b 单词边界
下面看看几个简单的例子:
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
- Eg1:
字符串中如何去除空格和换行,下面就是运用了正则表达式去除字符串中的空格和换行
var str : String = ” sds dsf\nsf “;
var rex : RegExp =/\s+/; //空格
var rex1 : RegExp = /\n+/; //换行
str = str.replace(rex,”");
str = str.replace(rex1,”");
- Eg2: