zoukankan      html  css  js  c++  java
  • 正则表达式之基础(二)

    字符串边界匹配:
     
    正则表达式中 可以用来匹配之后的一个字符必须出现在字符串的首位,也就是边界
     
    Text:
    The cat scattered its food all over the room
     
    Test Regular Expression:
    cat
     
    Result:
    The cat scattered its food all over the room
     
    在这个例子中,规定了字符"c"必须是字符串的首位,然后再匹配"a"和"t"
    "scattered"中虽然包含"cat",但是"c"显然不是在边界位置
     
    同样,可以用来匹配其前一个字符必须出现在字符串的末位,也是边界位置
    Text:
    The cat s cattered its food all over the room 
     
    Test Regular Expression:
    cat
     
    Result:
    The cat s cattered its food all over the room
     
    在这个例子中,前一个规定了字符"c"必须是字符串的首位,然后再匹配"a",后一个规定了字符"t"必须是字符串的末位
    "cattered"中虽然包含"cat",虽然"c"也在首位,但是"t"不是字符串的末位
     
    边界的概念和相对性:
     
    那么如何认定字符串首位和末位呢,为什么c、t的位置就是个边界呢?
    在正则表达式中,边界是个相对的概念,即对于单词字符来说,一般来说非单词字符就是它的边界,对于非单词字符来说,单词字符就是它们的边界。
     
    也就是说w的边界就是W,也就是说对于字母A-Z a-Z 数字0-9 和下划线_来说,它们都是单词字符,不能成为彼此的边界,只有像空格、逗号、句号等都是它们的边界,另外分隔符-也是单词字符的边界。
    正则表达式在字符边界问题上 对"-"的处理方式与搜索引擎相同,会把它当做空格来处理
     
    相反,W的边界就是w
     
    匹配单词字符边界
    Text:
    abcxabc
    abc-x,abc
     
    Regular Expression:
    x
     
    Results:
    abcxabc
    abc-x,abc
     
    匹配非单词字符边界
    Text:
    abc-abc
    abc --abc
     
    Regular Expression:
    -
     
    Results:
    abc-abc
    abc --abc
     
    字符串非边界匹配:
     
    有边界匹配自然就会有非边界匹配,猜也能猜出有大写字母B来表示非边界,原理和是一样的
     
    文本边界匹配:
     
    想要匹配整个文本的首位和末位,用或者B是行不通的,原因很简单,文本中的各种非单词字符都可以被认为是边界(如果我们匹配的是单词字符的话)
    ^匹配文本首位
    $匹配文本末位
     
    Text:
     Asset.DWG Asset1.DWG Asset2.dwg
     
    Regex:
    ^sAssetd*.DWG
     
    Result:
     Asset.DWG Asset1.DWG Asset2.dwg
     
    ==================================================================================================================
    Text:
    Asset.DWG Asset1.DWG Asset2.dwg 
     
    Regex:
    Assetd*.DWGs$
     
    Result:
    Asset.DWG Asset1.DWG Asset2.DWG 
     
    子模式:
     
    用一对"()"将一个字符串括起来就是一个子模式,它可以看做是一个单字符来进行匹配
     
    Text:
    <td>This is a test text</td><br><br><td></td>
     
    Regex:
    (<br>)+
     
    Result:
    <td>This is a test text</td><br><br><td></td>
     
    嵌套子模式:
     
    子模式可以再继续嵌套子模式,产生更加功能强大的匹配能力。
     
    匹配 1900 年1 月 1 日 到 2000 年 1 月 1 日 除过闰年外的所有正确日期
    Text:
    These dates are matched: 1900-1-1、1928-2-28、1931-11-30、2000-1-1、1999-10-30
    These dates are not matched: 1900-1-32、1928-2-29、2000-01-1、1982-12-08
     
    Regex:
    (19d{2}|2000)-(2-([1-9]|1d|2[0-8])|([13578]|1[02])-([1-9]|[12]d|3[01])|([469]|11)-([1-9]|[12]d|30)) 
     
    Result:
    These dates are matched: 1900-1-11928-2-281931-11-302000-1-11999-10-30
    These dates are not matched: 1900-1-32、1928-2-29、2000-01-1、1982-12-08
     
  • 相关阅读:
    Spring Cloud 模块简介2
    Eureka简介
    Spring Cloud 模块简介
    成神之路-基础篇 转
    Java面试题无答案
    java程序猿常用Linux命令
    Java工程师成神之路 转
    大型网站技术架构 大纲
    Mockito 相关资料
    webApp路由控制-vue-router2.0
  • 原文地址:https://www.cnblogs.com/seanshao/p/4240008.html
Copyright © 2011-2022 走看看