zoukankan      html  css  js  c++  java
  • 正则表达式(一)

    正则表达式

    正则表达式的一个特殊符号,表示单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置

    假如你要找的是hi后面不远处跟着一个Lucy,你应该用hi.*Lucy。

    .是另一个元字符,匹配除了换行符以外的任意字符。*同样是元字符,不过它代表的不是字符,也不是位置,而是数量——它指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配。因此,‘.* ’连在一起就意味着任意数量的不包含换行的字符。

    0d{2}-d{8}。这里d后面的{2}({8})的意思是前面d必须连续重复匹配2次(8次)。

    常用的正则元字符:

     

    示例:

    aw*匹配以字母a开头的单词——先是某个单词开始处(),然后是字母a,然后是任意数量的字母或数字(w*),最后是单词结束处()。

    d+匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。

    w{6} 匹配刚好6个字符的单词。

    常用的重复限定符

    贪婪与懒惰

    当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。

    有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。前面给出的限定符都可以被转化为懒惰匹配模式,只要在它后面加上一个问号?。这样.*?就意味着匹配任意数量的重复,但是在能使整个匹配成功的前提下使用最少的重复。现在看看懒惰版的例子吧:

    a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

    为什么第一个匹配是aab(第一到第三个字符)而不是ab(第二到第三个字符)简单地说,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。

    贪婪限定符

    参考地址: http://www.jb51.net/tools/zhengze.html

    天地何其大,人生何其短。 不困于一时,不困于一世。 且恒且坚,且苦且乐,且行且看。
  • 相关阅读:
    黄聪:VS中 "Duplicate items are not supported by the "Resources" parameter" 解决方法
    黄聪:新浪编辑器 SinaEditor
    黄聪:Delphi实现软件中登录用户的操作权限
    黄聪:Asp.Net性能优化
    黄聪:SQL Server 2005开窗函数的使用
    黄聪:Delphi 连接DBF数据
    黄聪:OpenGl 初级入门学习视频教程, 绘制一个立方体
    黄聪:再议.Net中null的使用规范
    黄聪:.NET开发中的Exception处理三定律[转]
    黄聪:SQL Server 开发之 复制表数据的SQL脚本生成器
  • 原文地址:https://www.cnblogs.com/mozizhu/p/3855369.html
Copyright © 2011-2022 走看看