很早就听说正则表达式的强大,今天终于一睹它的真容,在这里记下学习时候的笔记,以便以后查看

1、正则表达式

  用于描述字符串规则的的特殊的字符(正则表达式本身是字符串,用来描述字符串的相关规则,用于与其他字符串进行匹配)

  例如:

    正则表达式:\bHttp\b  表示单词 Http,两边的\b表示单词的开始于结束

      可以与"Here is a Http tag"匹配,但是不能与'", "HttpRequest", "XMLHttpRequest"等字符串匹配,

2、元字符(meta character)

  用于描述最基本的信息,常见的有以下元字符

    \b  单词的开始于结束

    \w  字母(大小写),数字,下划线

    \s  任意空字符(空格,制表符,回车)

    \d  匹配数字0-9

    .   小数点,匹配非换行字符

    ^  字符串的开始(注意:\b是表示单词)

    $  字符串的结束

    其中:\B,\W,\S,\D的含义与小写的相反

      例如:\D表示非数字字符

3、转义字符

  小数点:  \.  

  星号:   \*  

  下划线:  \\  

  括号:   \(  \)

3、限定字符      

  *    重复0次或多次
  +    重复1次或多次
  ?    重复0次或1次
  {n}   重复n次
  {n,}  重复n次以上
  {n,m}   重复n次到m次,包括n,m次

  当要匹配多个字符的时候,可以使用限定字符

      例如:^\d{5}\w*$  表示以5个数字开头的后面跟任意长度的字符(字母或数字或下划线)

4、字符类

  匹配单个字符  [abc]      匹配所有a,b,c字符

          [^acd]      匹配所有的部位a,c,d的字符

          [,.?!;'"]       匹配半角标点

          [a-zA-Z0-9_]  相当于\w

5、分枝条件

  当有多个匹配条件的时候,可以使用  '|'  符号来连接几个条件,会优先匹配第一个

  例如:\d{5}-\d{4}|\d{4}-\d{5}  

   IP地址:  ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

6、分组

  后向引用:用于搜索前面匹配的结果

  例如:在后面的匹配需要用到前面的匹配结果,

    \b(?<name>\w+)\b\s+\k<name>\b    匹配两个连续相同的单词

  (exp)        匹配exp表达式,并将匹配文本放到自动命名组里

  (?<name>exp)   可对匹配的文本手动命名,并通过\k<name>引用,也可以吧尖括号换成单引号(?'name'exp)

  (?:exp)       不获取文本,不分配组号

7、断言

  1)正预测先行断言  (?=exp)  先匹配断言里面的表达式,匹配出之前的位置,再匹配外面的表达式,匹配结果不包含断言内容

    例如:\d[0-9]*(?=9\b)  先判断单词是否以9结束,在判断是否为全数字,匹配结果不包含9

      78159  匹配结果为  7815  断言位置在9之前

  2)正回顾后发断言  (?<=exp)  匹配出之后的位置

    例如:(?<=\bre)\w*  匹配以 re 开头的单词,不包括re

      I'm reading  匹配结果为  eading  断言位置在re之后

  3)负向零宽先行断言   (?!exp)

    与正预测先行断言相似,只是匹配的条件为相反

    例如:  \d{3}(?!\d)      匹配三位数字,而且这三位数字的后面不能是数字;

         \b((?!abc)\w)+\b    匹配不包含连续字符串abc的单词。    

  4)负向零宽后发断言  (?<!exp)

    与郑回顾后发断言相似,匹配条件相反

    例如:  (?<![a-z])\d{7}    匹配前面不是小写字母的七位数字。

8、注释

  (?#comment)  例如  \d{3}(?!\d)(?#这里是注释)

9、贪婪匹配与懒惰匹配

  在默认情况下,所有的匹配都会采取贪婪匹配,即匹配竟可能多的项

  例如:  a.*b  匹配  abaaababaa

    默认情况下回匹配出  abaaabab,  而不是 ab,aaab,ab

  在限定符后面加上?则可以竟可能少的匹配

      a.*?  匹配  abaaababaa  结果为 ab,aaab,ab

10、在.NET中使用

        Regex regex = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace);
bool b = regex.IsMatch("44917929@qq.com");

  在new Regex的时候,可以设置一些参数  http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regexoptions.aspx

    Compiled              指定将正则表达式编译为程序集。 这会产生更快的执行速度,但会增加启动时间。 
    ExplicitCapture           仅捕获显式命名的组
    IgnoreCase            指定不区分大小写的匹配。
    None               匹配任何字符除了\n。^和$不起作用。
    Singleline             匹配任何字符。^和$匹配整个字符串
    Multiline             匹配任何字符除了\n。^和$匹配每行的开头和结尾。
    IgnorePatternWhitespace    忽略表达式中的非转义空白,并启用#标记注释

11、练习

    1、非负整数      ^\d+$
    2、正整数       ^[1-9]*[1-9][0-9]*$
    3、非正整数      ^(-\d+10)$
    4、负整数       ^-[1-9]*[1-9][0-9]*$
    5、整数        ^-?\d+$
    5、非负浮点数     ^\d+(\.\d+)?$
    6、正浮点数

    7、长度为8-10的用户名(以字母或下划线开头)          ^[A-Za-z_]\w{7,9}$
    8、电子邮件                          ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

    9、一个没有属性的html标签的内容(例如<div>内容</div>)   (?<=<(\w+)>).*(?=<\/\1>)

参考文章:

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html#lookaround

【.NET】正则表达式笔记的更多相关文章

  1. PHP正则表达式笔记和实例

    转自:  https://www.cnblogs.com/yafei236/p/4168290.html 本文主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己 ...

  2. Python的正则表达式笔记

    1. "先抓大再抓小": 遇到一个正则表达式无法一次性筛选出所需内容时, 可以先在一个范围内筛选第一次, 再在小范围中筛选第二次. 2. pattern = re.compile( ...

  3. Javascript正则表达式笔记

    一.字符类 将单独的直接字符放进[]内,就组成了字符类.一个字符类和它所包含的任何字符都匹配. 例如:/[abc]/ 与abc三个字母的任意一个匹配. 同时,还可以定义否定字符类.利用^字符.例如:/ ...

  4. python 正则表达式笔记

    #!usr/bin/env python3 #-*- coding:utf-8 -*- #正则表达式 #在正则表达式中,如果直接给出字符,就是精确匹配.用\d可以匹配一个数字,\w可以匹配一个字母.数 ...

  5. c# 正则表达式笔记

    估计要写几天 看得一个不错的正则教程包括字符串教程 C#字符串和正则表达式参考手册.pdf 正则所需要的命名空间是 using System.Text.RegularExpressions 它包含了8 ...

  6. apache url rewrite及正则表达式笔记

    什么是mod_rewrite? mod_rewrite是apache一个允许服务器端对请求url做修改的模块.入端url将和一系列的rule来比对.这些rule包含一个正则表达式以便检测每个特别的模式 ...

  7. JS正则表达式笔记

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 正则 描述 ...

  8. Python之正则表达式笔记

    概述 概念 Regular Expression 一种文本模式,描述在搜索文本时要匹配的一个或多个字符串 典型场景 数据验证.文本扫描.文本提取.文本替换.文本分割 语法 字面值 普通字符 需转义:\ ...

  9. 果然学习好是有道理的,学习Mysql与正则表达式笔记

    正则表达式是用来匹配文本的特殊的字符集合,将一个正则表达式与文本串进行比较,Mysql中用where子句提供支持,正则表达式关键字:regexp1.使用‘|’匹配两个串中的一个 2.使用‘[]’匹配几 ...

随机推荐

  1. Android Studio占用C盘内存

    使用Android Studio的时候,会发现,在各种下载导入的时候,C盘内存耗费的非常的快,于是我看了下配置.

  2. python使用selenium

    首先安装 pip install selenium 测试抓取baidu,其中的chromedriver.exe需要自己下载,百度有很多的 import timefrom selenium import ...

  3. Java编程的逻辑 (31) - 剖析Arrays

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  4. VS2013安装MVC5

    打开VS 选择  .net 4.5 创建项目 右击项目 选择管理NuGet 输入Microsoft.AspNet.Mvc -Version 5.0.0 安装最新版本的MVC5

  5. 【Ansible】 各种模块

    [Ansible 模块] 就如python库一样,ansible的模块也分成了基本模块和第三方拓展模块(自定义的模块).这些模块其实才是作为真实的逻辑载体,在帮助ansible进行作业. ansibl ...

  6. pom.xml设置maven的编码方式

    <build> <defaultGoal>compile</defaultGoal> <plugins> <plugin> <grou ...

  7. Writing a Reusable Custom Control in WPF

    In my previous post, I have already defined how you can inherit from an existing control and define ...

  8. 关于Unity中粒子效果的使用

    粒子效果1: 游戏中会有很炫酷的特效,比如爆炸,水花,火焰等;2: unity提供粒子编辑器,方便特效人员来开发很炫酷的特效;3.粒子效果一般有专门的粒子特效师来做,我们只需要拿来用就好了,很多参数没 ...

  9. 百度搜索_如何打开Intellij IDEA的代码提示功能?

    Intellij IDEA是一款优秀的编程软件,相比较Eclipse之下它的用户群较小,但并不代表它的功能就比Eclipse差,如果用顺手了还是特别好用的.代码提示功能对于程序员来说非常重要,那么我们 ...

  10. Playing FPS Games with Deep Reinforcement Learning

    论文不同点: (1)用两套网络分别实现移动和射击. (2)使用LSTM来处理不完全信息. 疑问: (1)为什么对于射击使用RNN,对导航却没有使用RNN.一般来说,当我们看见视野里面有敌人的时候,我们 ...