zoukankan      html  css  js  c++  java
  • 正则表达式 学习手记 111221

    之前项目里面一直使用正则表达式,然而对于正则的语法只有基本的了解,这二天采点时间学习一下基本知识

    1.     正则表达式字符含义

    1.1.     元字符

    元字符语法

    代码

    说明

    .

    匹配除换行符以外的任意字符

    \w

    匹配字母或数字或下划线或汉字

    \s

    匹配任意的空白符

    \d

    匹配数字

    \b

    匹配单词的开始或结束

    ^

    匹配字符串的开始

    $

    匹配字符串的结束

    1.2.     反义

    反义语法

    代码

    说明

     \W

    匹配任意不是字母、数字、下划线、汉字的字符

     \S

    匹配任意不是空白符的字符

     \D

    匹配任意非数字的字符

     \B

    匹配不是单词开头或结束的位置

    [^x]

    匹配除x以外的任意字符

    [^aeiou]

    匹配除aeiou几个字母以外的任意字符

    1.3.     重复

    重复语法

    代码

    说明

    *

    重复零次或更多次(>=0

    +

    重复一次或更多次(>=1

    ?

    重复零次或一次(1,0

    {n}

    重复n次(=n

    {n,}

    重复n次或更多次(>=n

    {n,m}

    重复nm次(>=n,<=m

    1.4.     字符类

    [ ] 字符类

    [0-9]代表09任意一个数字 \d

    [a-z0-9A-Z_]代表任意一个数字、大小写、下划线 \w

    1.5.     分枝条件

    | 采用|把不同的规则分隔开,满足其中任意一种规则都当匹配

    \d{2}|\d{8}  表示2位数或8位数均满足

    \(?0\d{2}\)?[- ]?|0\d{2}[- ]?  表示()可以匹配,也可以不用,[- ]?表示满足一次或零次

    1.6.     分组

    采用小可以指定子表达式(分组),再用{n}指定需要重复次数

    (\d{1,3}){3} 表示匹配113位数字,匹配可以重复3

    (\d{1,3}\.){3}(2[0-4]\d|25[0-5]) 表示113位数字加一个英文句号匹配重复3次,后面省略。

    分组语法

    分类

    语法

    说明

     

    捕获

    (exp)

    匹配exp,并捕获文本自动命名组

    (?<name>exp)

    匹配exp 并捕获文本到名称为name的组里,同(?’name’exp)

    (?:exp)

    匹配exp,不捕获匹配的文本,也不分配组号

    零宽断言

    (?=exp)

    匹配exp前面的位置

    (?<=exp)

    匹配exp后面的位置

    (?!exp)

    匹配后面跟的不是exp的位置

    (?<!exp)

    匹配前面不是exp的位置

    注释

    (?#comment)

    这种类型的分组不对正则表达式的处理产生任何影响。

    1.7.     后向引用

    使用小括号指定子表达式(分组),默认情况,每个分组均拥有一个组号。

    后向引用用于重复搜索前面某分组匹配的文本。如 \1 代表分组1匹配文本 或采用\k<word>

    \b(\w+)\b\s+\1\b 可以匹配重复单词,如go go

    1.8.     贪婪与懒惰

    贪婪匹配 匹配尽可能多的字符 如: a.*b

    懒惰匹配 匹配尽可能少的字符 如: .*?

    懒惰限定符

    语法

    说明

    *?

    重复任意次,尽可能少重复

    +?

    重复1次或更多次,尽可能少

    ??

    重复01次,尽可能少

    {n,m}?

    重复nm次,尽可能少

    {n,}?

    重复n次以上,尽可能少

    1.9.     正则表达式选项

    RegexOption成员

    说明

    None

    指定不设置任何选项

    IgnoreCase

    指定不区分大小写的匹配

    Multiline

    指定多行模式,更改 ^ $ 含义,匹配任何行开头和结尾

    Compiled

    编译为程序集,启动时间代价,得到更快的执行速度。

    Singleline

    单行模式。更改句点字符(.)含义,使它与每个字符匹配(除\n

    IngorePatternWhitespace

    排除转义空白

    RightToLeft

    从右向左搜索

    1.10. 正则表达式编写方法

    一般编写方式:

    实例化后,采用Match进行校验

    Regex regex= new Regex(expression, RegexOptions.Compiled);

    match = regex.Match(input);

    if (match.Success)

    当然也可以采用静态方法校验,如:

    Regex.IsMatch(strInput, @"^(\w+)@(\w+)\.(\w+)$");

    Regex.IsMatch(strInput, @"^(\w+)@(\w+)\.(\w+)$",RegexOptions.Compiled);

    分组内容输出:

      Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",RegexOptions.Compiled);

      r.Match(url).Result("${proto}${port}");

    多行分组输出可以采用:

    regex = new Regex(expression, regexOptions);

     mc = regex.Matches(ms);

     foreach (Match mt in mc)

     {

        String str=  match.Groups["groupsName1"]  + match.Groups["groupsName2"];

     }


  • 相关阅读:
    当td中文字过长时,显示为省略号
    清除页面缓存
    在dwr的调用类里获取请求信息
    解决利用hibernate连接mysql时无法插入汉字的问题
    MySql的数据库方言问题
    解决IE升级后必须以管理员运行的问题
    form表单里的button调用js函数
    EF多租户实例:演变为读写分离
    EF多租户实例:快速实现分库分表
    EF多租户实例:如何快速实现和同时支持多个DbContext
  • 原文地址:https://www.cnblogs.com/xoray007/p/2297538.html
Copyright © 2011-2022 走看看