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"];

     }


  • 相关阅读:
    java的构造方法 java程序员
    No result defined for action cxd.action.QueryAction and result success java程序员
    大学毕业后拉开差距的真正原因 java程序员
    hibernate的回滚 java程序员
    验证码 getOutputStream() has already been called for this response异常的原因和解决方法 java程序员
    浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓 java程序员
    你平静的生活或许会在某个不可预见的时刻被彻底打碎 java程序员
    Spring配置文件中使用ref local与ref bean的区别. 在ApplicationResources.properties文件中,使用<ref bean>与<ref local>方法如下 java程序员
    poj1416Shredding Company
    poj1905Expanding Rods
  • 原文地址:https://www.cnblogs.com/xoray007/p/2297538.html
Copyright © 2011-2022 走看看