正则表达式

来源:互联网 发布:宝山区行知外国语学校 编辑:程序博客网 时间:2024/06/06 07:12

前言

正则表达式,是用一个表达式去匹配一个已知的字符串,将按照表达式的方式查找出字符串,然后可以进行替换等操作

1,用途
字符串匹配(字符匹配),更应该叫做字符匹配,因为是一个字符一个字符去匹配,其匹配的结果:能匹配或者不能
字符串查找,是建立在字符串匹配的前提下
字符串替换,是建立在字符串查找的前提下


2,meta character
. 代表1个字符
? 0个或1个
* 0个或多个
+ 1个或多个

{n} 出现n次
{n,}至少n次
{n,m}大于n小于m

/d 1个数字[0-9]
/D 1个非数字[^0-9]
/s 1个空白字符[ /t/n/x0b/f/r] 
/S 1个非空白字符[^/s]
/w 1个构成单词的字符[a-zA-Z_0-9]
/W 1个非构成单词的字符[^/w]

3,范围
[abc]匹配中括号中abc的一个字符
[^abc]匹配除了abc的一个字符
[a-zA-Z]匹配a-z或A-Z中的一个字符
[A-Z&&[RFG]]匹配A-Z中并且是RFG三个字母中的一个字符

4,bound边界匹配:指开头和结尾
POSIX是unix的一套标准,如果程序符合POSIX标准,都能在所有的UNIX上运行
^ 一行的开头
$ 一行的结尾
/b 一个单词的边界
/B 非单词边界[^/b]

5,group分组
用途:在匹配的结果中,可以用来指输出某些部分
用小括号可以用来分组,分组的编号是从左往右数左小括号,数到几,这个小括号就是第几组

6,quantilifiers修饰符
greedy quantilifilers 贪婪的
reluctant quantilifilers 不情愿的

7,non-capturing非捕获
(?)小括号中以?开头的组,叫做非捕获组
例如regex = ".{3}(?=a)",如果字符串为444a66b,匹配的字符串为444,而不是444a 

8,示例

筛选邮箱的正则表达式:
([A-Za-z0-9_-]+(/./w+)*@(/w+/.)+/w{2,3})

筛选网址的正则表达式:
http://.([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?

筛选网页中的url的正则表达式:
<a href=([^>]+)>([^<]+)</a>

9,如何在vc++6.0环境下应用正则表达式?
vc++6.0本身不支持正则表达式(没有相应的库),boost库对正则表达式有良好的支持,因此vc++6.0下需要安装boost库后就能使用正则表达式,关于boost库的相关内容,请访问本人的另一篇文章“boost库”

原创粉丝点击