正则表达式 学习资料整理
本文导语: 常用正则表达式 整理篇http://www./article/17355.htm 正则表达式高级学习技巧http://www./article/9229.htm 1.正则表达式简介 正则表达式(Regular expression,简写为Regexes)是一种用来操作和检验字符串数据的强大工具。它相当与一串特殊的字...
常用正则表达式 整理篇
http://www./article/17355.htm
正则表达式高级学习技巧
http://www./article/9229.htm
1.正则表达式简介
正则表达式(Regular expression,简写为Regexes)是一种用来操作和检验字符串数据的强大工具。它相当与一串特殊的字符,用它可以转换成算法,对文本进行匹配等操作。
事实上正则表达式有其自身的一套语法,这种语法对于初学者来说显得有些晦涩难懂。尤其是其构造比较困难,称为很多入门者的障碍。但当掌握后却可以轻易的解决以前不容易解决的很多文本类问题,如验证提取等。
其常用场合有如下三种:
Ø 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
Ø 替换文本。可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字。
Ø 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。
2.正则表达式基础语法
2.1匹配不同类型的字符
字符类
匹配的字符
d
匹配一个数字字符。等价于 [0-9]。
D
匹配一个非数字字符。等价于 [^0-9]。
w
匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
W
匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S
匹配任何非空白字符。等价于 [^ fnrtv]。
.(点号)
任一字符
[...]
括号中的任一字符
[^…]
非括号中的任一字符
2.2定位控制字符
^
其后的模式必须在字符串的开始处,如果是多行则在任一行的开始C#需要设定Multiline标志
$
前面的模式必须在一行的末尾,如果是多行,则在任意行的末尾
A
前面的模式必须在字符串的开始处;多行标志被忽略
z
前面的模式必须在字符串的末尾处,多行标志被忽略
Z
前面的模式必须位于字符串的末尾或位于换行符前
b
匹配一个单词字符的开始,单词字符是[a-zA-Z0-9]中的一位
B
匹配一个非单词边界的位置, 不在一个单词的开始
2.3指定重复字符
{n}
匹配前面的字符n次
{n,}
匹配前面的字符最少n次
{n,m}
匹配前面的字符n至m次
?
匹配前面的字符0次或1次
+
匹配前面的字符至少1次
*
匹配前面的字符至少0次
2.4特殊控制类
|
指定字符替换,即该位置可以是|两边的任一个表达式
2.5 特殊字符转义序列
\
匹配””
.
匹配“.”
*
匹配“*”
(
匹配“(”
)
匹配”)”
?
匹配“?“
+
匹配“+“
|
匹配“|“
{
匹配“{“
}
匹配“}“
^
匹配“^“
$
匹配“$“
n
匹配换行符
r
匹配回车
t
匹配Tab键
v
匹配垂直制表符
f
匹配换页符
nnn
匹配一个三位八进制数指定的ASCII字符,如103匹配C
xnn
匹配一个二位16进制数指定的ASCII字符,例如x43匹配C
unnnn
匹配一个4位16进制数指定的Unicode字符
cV
匹配一个控制字符,(如复制Ctrl+C)
2.6正则表达式分组、替换、反向引用等高级应用
以上只是正则表达式的基础部分,从这里开始才算真正开始正则表达式之旅。
² 分组
分组技术可以匹配在一个组中的所有字符,用()来表示,是下面两个技术的基础所在。“()“又称捕获符号。
1. 捕获:()
例子:ABC1EDF2UU
匹配组表达式:([A-Z]{3})d --匹配3个连续大写字母和一个数字
匹配结果:1.ABC1,2.EDF2
如果用C#中的group,则为ABC,EDF。因为group搜集的是匹配组的内容。
2.非捕获(?:)
使用了非捕获就说明该()中的内容将不作为捕获的组返回,而和其它表达式共同构成匹配项返回。也就是捕获组将不存在。
例:1AF3EDC
匹配表达式:(?:d|[A-Z])w --匹配一个数字或字母加一个任意的字符。
匹配结果:1.1A 2.F3 3.ED
没有组被捕获
2. 通过名称捕获(?)
定义了名称捕获的组可以在反向匹配中运用名称进行反向引用而不需要再使用数字进行反向捕获。注意组名区分大小写!
² 替换
替换,顾名思义,是将匹配的字符替换成其他指定的字符形式。这个功能是在分组的基础上的(当然或许可以单独存在,但是那样匹配的功能显然不够强大)。在这里有一个技巧是使用附加的匹配字符控制匹配内容。
$group
用group指定的组号进行替换
${name}
替换由