正则
从某种意义上来说,正则就是通配符(如*、?)的加强版写法。


注释语法:(?#comment) ,其中comment代表注释内容。
正则中转义符为“/”
正则中可以使用条件进行限制,符号为“|”(意思应该是“或”)



* 匹配*前面的字符任意次(最少0次)

+ 匹配前面的字符重复1次或更多次

? 匹配前面的字符零次或一次

/b代表单词开始或结束位置(可以是空格、标点、回车、TAB等)

--例:/ba.+/b 代表匹配以a开始的单词后换行之前的本句所有字符
--/ba*/b 代表匹配仅以字母a组成的单词(如a、aa、aaaaa……)



. 可以匹配除换行外任意字符

/d 匹配一个数字(范围:0-9)

{n} 代表匹配前面的字符n次

{n,} 代表匹配前面的字符至少n次

{n,m} 代表匹配前面的字符至少n次,至多m次(符号均为半角,中间不可有空格)

--例:/d{5,} 代表需要匹配的对象中最少有连续5个数字




/s 匹配任何空白字符,包括空格、制表符、换页符等等。

/w 匹配字母或数字或下划线或汉字 

^ 匹配字符串的开始 
$ 匹配字符串的结束 

--例:^/w{6}/s/w+$ 代表整个文本必须是以由6个字符(仅包括字母、数字、开线、汉字)组成的单词开头,并紧跟一个空白字符,然后是由至少一个单词字符构成的单词结束。




[字符] 这种形式可以预定要匹配的字符,比如[aeiou]可以匹配任意一个且仅一个元音字母。

[.?!] 匹配(.或?或!)这三个中任意一个标点符号。





/f 匹配一个换页符。等价于 /x0c 和 /cL。 

/n 匹配一个换行符。等价于 /x0a 和 /cJ。 

/r 匹配一个回车符。等价于 /x0d 和 /cM。

/t 匹配一个制表符。等价于 /x09 和 /cI。 

/v 匹配一个垂直制表符。等价于 /x0b 和 /cK。



重复多个字符可以使用分组,符号为“()”。此处()内的内容应该看做一个整体。
每个组都会有自己的名字,若没有人为命名则从第一个组开始依次为:/1 /2 /3 ……

分组的命名方式为(?<组名>/d*/b)或(?'组名'/d*/b)。

人为命名的分组引用方式为:/k<组名> 或 /k'组名'

实际上组号分配过程要从左向右扫描两遍:第一遍只给未命名组分配,第二遍只给命名组分配--因此所有命名组的组号都大于未命名的组号 

分组0对应整个正则表达式 

--例:/b(/w+)/b/s+/1/b 用这个表达式可以轻松的找出连续重复的单词,具体怎么解释~~ “你懂的”




反义:将元字符转换为大写既是反义。(这里不清楚是否所有的元字符大写都是反义)

/W 匹配任意不是字母,数字,下划线,汉字的字符 
/B 匹配不是单词开头或结束的位置 
[^x] 匹配除了x以外的任意字符 
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符 







零宽断言,分为正向(既匹配)与负向(既不匹配)两种。

语法如下:
(?=Examples) 匹配Examples前面的位置 
(?<=Examples) 匹配Examples后面的位置 
(?!Examples) 匹配((?!Examples)这个表达式)后面跟的不是Examples的位置 
(?<!Examples) 匹配((?!Examples)这个表达式)前面不是Examples的位置 


顾名思义,使用零宽断言不浪费字符位置。比如需要查找:包含字母t且t后面不是字母c的一个单词。此时可以使用如下正则表达式:/b/w*t[^c]/w*/b 。但如果此单词最后一位是t的情况下[^c]依然会继续匹配下一个字符,那么若用来匹配do not giev up 会取出 "not giev"两个单词。

是的,这并不是我的原意。

那好的,现在我使用 /b/w*t(?!c)/w*/b 来匹配。哇太棒了,结果是"not"!不得不承认我是个天才~~




贪婪匹配(最多匹配)

在使整个表达式能得到匹配的前提下匹配尽可能多的字符。

--例:a.*b 用来匹配ababababababab时会将ababababababab整个提取出来。

懒惰匹配(最少匹配)

在能使整个匹配成功的前提下使用最少的重复

--例:a.*?b 用来匹配ababababababab时会将ab切割提取出来,既只提取了第一个ab。





捕获 (不怎么理解这东西···哪位高手给讲下)

(Examples) 匹配Examples,并捕获文本到自动命名的组里
(?<name>Examples) 匹配Examples,并捕获文本到名称为name的组里,也可以写成(?'name'Examples)
(?:Examples) 匹配Examples,不捕获匹配的文本,也不给此分组分配组号
 
 

 

 

#1楼
原义字符集:


/b 匹配一个单词边界,也就是指单词和空格(或标点,jorln)间的位置。

/B 匹配非单词边界。 

/cx 匹配由x指明的控制字符。 

/d 匹配一个数字字符。等价于 [0-9]。

/D 匹配一个非数字字符。等价于 [^0-9]。 

/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。 

/w 匹配包括下划线的任何单词字符(包括汉字)。等价于’[A-Za-z0-9_]’。 

/W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。 

/xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。

/num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。 

/n 标识一个八进制转义值或一个后向引用。如果 /n 之前至少 n 个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。 

/nm 标识一个八进制转义值或一个后向引用。如果 /nm 之前至少有is preceded by at least nm 个获取得子表达式,则 nm 为后向引用。如果 /nm 之前至少有 n 个获取,则 n 为一个后跟

文字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 /nm 将匹配八进制转义值 nm。 

/nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。 

/un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字符。

[/u4E00-/u9FA5] 匹配汉字
阅读更多
文章标签: 正则表达式 c up
想对作者说点什么? 我来说一句

正则测试软件

2018年04月11日 11.54MB 下载

正则与DOS基础详解

2011年09月01日 286KB 下载

Oracle中使用正则表达式

2011年08月25日 319KB 下载

JS的正则详解.doc

2009年06月09日 34KB 下载

正则验证软件正则验证软件

2010年01月09日 469KB 下载

两个类(JAVA类型转换)

2011年10月30日 4KB 下载

正则式.pdf 正则式.pdf

2010年05月04日 448KB 下载

正则调试器,政策表达式必备

2011年07月18日 427KB 下载

没有更多推荐了,返回首页

不良信息举报

正则

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭