正则表达式语法 应用

接触正则表达式也有一段时间了,也深体会REGEXP的优点,始终没有仔细的学习过,最近写个。net的程序,需要用到正则,现整理一下,以防忘记。

正则表达式基本语法
一.
1. \d 0-9数字
2. \D 非数字,0-9 补集
3. \w 单词字符 0-9 & 大小写字母 & 下划线
4. \W \w的补集
5. \s 空白字符 如:换行\n & 回车\r & 制表符\t & 垂直制表符\v & 换页符\f
6. \S \s的补集
7. \. 除换行符\n以外的所有字符
8. [...] 匹配[]内所有字符
9. [^...] 匹配[]内所列出的所有字符

string test = @"Success belongs to those who are prepared!";
Regex r1 = new Regex("to");
//Console.Write(r1.IsMatch(test)); = true
Regex r2 = new Regex("[0-9a-z]"); //匹配0-9 z-a
//Console.Write(r2.IsMatch(test)); = true



Regex r3 = new Regex("^belongs to those$");
Regex r4 = new Regex("^Success belongs to those who are prepared!$");
Regex r5 = new Regex("^Success belongs to those");
Console.Write(r3.IsMatch(test)); //false
Console.Write(r4.IsMatch(test)); //true
Console.Write(r5.IsMatch(test)); //true
Console.Write(r5.Matches(test).Count);



//多行时
String test1 = @"Success belongs to
those who are prepared!";
Regex r6 = new Regex(@"^Success belongs to\r\nthose who are prepared!$",RegexOptions.Multiline);

Console.Write(r6.IsMatch(test1)); //true
Console.Write(r6.Matches(test1).Count); //1


//多行时设置了RegexOptions.Multiline属性,^$多次匹配,每行一次
Regex r7 = new Regex("^", RegexOptions.Multiline);
Console.Write(r7.Matches(test1).Count); //2



// \b约束一个完整的词,\bxxx\c 或 \bxxx 或 xxx\b 一样
Regex r8 = new Regex(@"belongs\b", RegexOptions.Multiline);
Console.Write(r8.Matches(test1).Count); //1


string date = "1986-02-14";
//([1-9]\d{3}-\d{2}-\d{2})|(\d{4}/\d{2}/\d{2})
Regex r9 = new Regex(@"^[1-9]\d{3}-\d{2}-\d{2}$");
Console.Write(r9.IsMatch(date)); //true

二.定位符。定位符代表一个虚的字符,是一个位置也可以直观的认为定位符是字符与字符间的微小的间隙。
1. ^ 其后的字符位于字符串的开始
2. $ 其前的字符位于字符串的结束
3. \b 匹配一个单词的边界
4. \B 匹配非单词的边界

5. \A 前面的字符必须位于字符串的开始处
6. \z 前面的字符必须位于字符串的结束处
7. \Z 前面的字符必须位于字符串的结束处或者换行符前
8. \b 通常约束一个完整的单词
三.重复描述字符
1.{n} 匹配前面的字符n次
2.{n,} 匹配前面的字符n次或多于n次
3.{n,m} 匹配前面的字符n - m 次
4.? 匹配前面的字符0 - 1次
5.+ 匹配前面的字符1或多于1次
6.= 匹配前面的字符0次或少于0次
四.择一匹配
1.(|) 如:(ad|cd)
2.如[a-z]
五.特殊字符匹配
1.\\ 匹配\
2.\" 匹配“
六. 贪婪与非贪婪 ****
1.(a)(\w+) :匹配a及后面字符
2.(a)(\w+)(a) : 为了精确匹配\w+会让出最后一位匹配a
同理,带 "*" 和 "{m,n}" 的表达式都是尽可能地多匹配,带 "?" 的表达式在 匹配可不匹配的时候,也是尽可能的 "要匹配"。这 种匹配原则就叫作 "贪婪" 模式。在修饰匹配次数的特殊符号后再加上一个 "?" 号,则可以使匹配次数不定的表达式尽可能少的匹配,使可匹配可不匹配的表达式,尽可能的 "不匹配"。这种匹配原则叫作 "非贪婪" 模式,也叫作 "勉强" 模式。如果少匹配就会导致整个表达式匹配失败的时候,与贪婪模式类似,非贪婪模式会最小限度的再匹配一些,以使整个表达式匹配成功。如:abbbabbba
3.(a)(\w+?) 只匹配了a 后一个b
4.(a)(\w+?)(a) 为了匹配成功,\w+?匹配了bbb
别人写的一个例子很形象:如下

举例:表达式 "<td>(.*)</td>" 与字符串 "<td><p>aa</p></td> <td><p>bb</p></td>" 匹配时,匹配的结果是:成功;匹配到的内容是 "<td><p>aa</p></td> <td><p>bb</p></td>" 整个字符串, 表达式中的 "</td>" 将与字符串中最后一个 "</td>" 匹配。而相比之下:表达式 "<td>(.*?)</td>" 匹配举例1中同样的字符串时,将只得到 "<td><p>aa</p></td>", 再次匹配下一个时,可以得到第二个 "<td><p>bb</p></td>"。

七. 回溯与非回溯
八. 正向搜索与反向搜索
九. 16进制范围
十. 精确匹配 *****

找时间把没相对应的代码补上,以便学习!现在用C#,就上C#代码吧,java的regex也差不多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值