学习正则(一)

来源:互联网 发布:java天气预报接口api 编辑:程序博客网 时间:2024/06/09 14:17

一、了解正则

     正则表达式是一种处理文本的有用工具,通常用作数据检验、数据抓取等地。

 

二、正则语法

非显式限定符:
1、* 描述出现0或多次
2、+ 描述出现1或多次
3、?描述出现0或1次
显式限定符:
花括号{}及其中的数字表示
如a{2} 表示a出现2次;
如a{2,} 表示a出现2次以上;
如a{2,3} 表示a出现2次以上3次以下;

元字符:
*、?、+、{}...
^ 表示开始 ^a 表示以a字符开始
abc$ 表示以abc结束的字符串
/ 转义字符
|或
() 模式分组 (abc){2,} 表示abc出现2次以上的字符串

字符类:
a.最简单的字符类只不过是括号中的一个字符表,如 [aeiou] 表示a、e、i、o、u字母中的一个;
b.^在字符类中使用,表示否字此类,如否定连字符"-",则"-"必须为第二个字符,如 [^-][0-9]表示不匹配 -0、-1...
注意:
1、元字符在字符类中不做任何处理,所以不需要转义;
2、[a-z] -连字符是根据ascII或unicode表中的顺序来排列的;
3、不能使用字符类定义单词或模式,只能是单个字符

预定义的集合元字符(.net System.Text.RegularExpressions中提供)
/a      匹配铃声(警报);/u0007
/b      匹配字符类外的字边界,它匹配退格字符,/u0008
/t    匹配制表符,/u0009
/r    匹配回车符,/u000D
/w    匹配垂直制表符,/u000B
/f    匹配换页符,/u000C
/n    匹配新行,/u000A
/e    匹配转义符,/u001B
/040    匹配 3 位 8 进制 ASCII 字符。
/x20    使用 2 位 16 进制数匹配 ASCII 字符。
/cC    匹配 ASCII 控制字符,此例中是 ctrl-C。
/u0020     使用 4 位 16 进制数匹配 Unicode 字符。
/*    不代表预定义字符类的任意字符都只作为该字符本身对待。
/p{name}匹配已命名字符类“name”中的任意字符。支持名称是 Unicode 组和块范围。
/p{name}匹配已命名字符类“name”中不包括的文本。
/w    匹配任意单词字符。
/W    /w 的否定,等效于 ECMAScript 兼容集合 [^a-zA-Z_0-9] 或
/s    任意空白区域字符。
/S    匹配任意非空白区域字符。
/d    匹配任意十进制数字。
/D    匹配任意非十进制数字。
参考(http://msdn.microsoft.com/zh-cn/library/ms972966.aspx)

 

后向引用:
捕获    
(exp)         匹配exp,并捕获文本到自动命名的组里
(?<name>exp)     匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)     匹配exp,不捕获匹配的文本,也不给此分组分配组号
如:/(url=(?<url>.*?)/)(?<name>.*?)/(/url/)
(url=http://soft.lexun.com/list_new.aspx?cd=0&lxt=0&pid=0&gid=0)最新(/url)|(url=http://soft.lexun.com/subjectinfo.aspx?id=330&p=2)必备(/url)
被保存到 url 与 name 中;
参考(http://deerchao.net/tutorials/regex/regex.htm#grouping)

零宽断言    

(?=exp)     匹配exp前面的位置
(?<=exp)     匹配exp后面的位置
(?!exp)     匹配后面跟的不是exp的位置
(?<!exp)     匹配前面不是exp的位置

注释    

(?#comment)     这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

原创粉丝点击