DNS(linux windows)
2014-05-07 17:01
197 查看
接触正则表达式也有一段时间了,也深体会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. [^...] 匹配[]内所列出的所有字符
二.定位符。定位符代表一个虚的字符,是一个位置也可以直观的认为定位符是字符与字符间的微小的间隙。
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也差不多。
正则表达式基本语法
一.
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也差不多。
相关文章推荐
- DNS从服务器迁移(基于windows为主,linux为从实现同步)
- WINDOWS与LINUX下的DNS轮询配置
- Linux/Windows下如何清空DNS缓存
- Windows主机与VirtualBox虚拟机下的Linux共享网络和windows本机ip和dns地址怎么查?
- Windows和Linux DNS Cache清理
- Windows/Linux/Mac上清除DNS缓存的命令
- IT: 怎么刷新Linux/Windows/Mac系统的DNS缓存
- 如何在MAC OS,Linux和Windows清除本地DNS缓存
- 在Linux/Windows/Mac上刷新DNS缓存的方法
- 理论付诸实践,Windows和Linux的DNS相互“做主”
- 用Windows做客户机访问Linux
- 5款免费Windows远程连接Linux桌面软件(VNC客户端)
- windows下程序的命名习惯和Linux下程序的命名习惯对比
- linux 下DNSMASQ的DNS配置
- 只有无线网无宽带连接的情况,如何使windows中的虚拟机下linux相互ping通
- linux下与windows下的换行符
- 安装Oracle 11g RAC R2 之Linux DNS 配置
- windows与linux文件格式的互转
- 玩转Windows访问Linux下的共享文件
- Windows通过SecureCRT远程登录Linux主机