zoukankan      html  css  js  c++  java
  • 菜鸟级-正则表达式

    正则表达式

    正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如:

    • 检查文本中是否含有指定的特征词
    • 找出文中匹配特征词的位置
    • 从文本中提取信息,比如:字符串的子串
    •  修改文本

     

    正则表达式是什么?

             正则表达式只是一个字符串。没有长度限制,但是,这样的正则表达式长度往往较短

             如下所示:

    • I  had  a  s  +  day  today
    •  [A – Z a – z 0 – 9-_]{ 3,16 }
    •   dddd-dd-dd
    •   V(d+)(.d+)*
    •   TotalMessages=’’(.*?)’’
    •  <[^<>]>
    • 每一个正则表达式都有输入(文本)和输出(匹配规则的输出,有时是修改后的文本)

    特别提醒:正则表达式与文本统配语法无关,比如 *.xml

    正则表达式的基础语法

    字符

    正则表达式中包含了一系列字符,这些字符只能匹配他们本身。有一些被称为“元字符”的特殊字符,可以匹配一些特殊规则

    如下所示,红色为元字符

    •  I  had  a  s  +  day  today
    •  [A – Z a – z 0 – 9-_]{ 3,16 }
    •  dddd-dd-dd
    •   V(d+)(.d+)*
    •  TotalMessages=’’(.*?)’’
    •   <[^<>]>

    大部分的字符,包括所有的字母和数字字符,是普通字符。也就意味着,他们只能匹配他们自己。

     

    到目前为止,正则表达式的功能类似于

    •   常规的find功能
    •   Java中的 String.indexOf() 函数
    •   PHP中的 strops()函数
    •  等等

     

    注意:不做特殊说明,正则表达式中是区分大小写的。但是,几乎所有的正则表达式的实现,都会提供一个Flag用来控制是否区分大小写。

    1. “ . ”

        元字符“.”,意味着可以匹配任意字符

        如:c.t可以匹配cat,cot,cxt……

      2.“ ”

      使用反斜杠“”可以忽略元字符,使得元字符的功能与普通字符一样。

      如:c.t    表示找到字母c,然后是一个句号(“.”),紧跟着是字母t

     

    反斜杠“”本身也是一个元字符,这意味着反斜杠本身也可以通过相似的方法变回到普通字符的用途。因此,正则表达式:

    c\t  表示匹配 以字符c开头,然后是一个反斜杠(),紧跟着是字母t

     

     

     

    字符类

               字符类是一组在方括号内的字符,表示可以匹配其中的任何一个字符

    •   A[0-9]t  表示匹配以A开头,接着是0-9中任何一位字符,最后以t结尾
    •  [[]ab]表示匹配的字符为“[”或者“]”或者“a”或者“b”
    • l  [\[]] 表示匹配的字符是“”或者“[”或者“]”

     

    在字符类中,字符的重复出现和出现顺序并不重要。[dabaaabcc]和[abcd]是相同的

    重要提示:字符类中和字符类外的规则有时不同,一些字符在字符类中是元字符,在字符类外是普通字符。一些字符正好相反。还有一些字符在字符类中和字符类外都是元字符,这要视情况而定!

     

    在字符集中,短横线(-)表示匹配字母或数字的范围([0-9]),在字符类之外,短横线没有特殊含义(a-z:表示匹配字符串以a开头,然后是一个短横线,以z结尾)

    注意:范围的字符值代表的是字符而已,并不能代表数值范围,比如[1-31]表示匹配一个数字,是1或者2或者3,而不是匹配一个数值在1到31之间的数

     

    字符类的反义(在字符的起始位置放一个反义符)

    •   [^a]表示匹配任何不为a的字符
    •   [^ab]表示匹配一个为“^”或者a或者b的字符
    •   [^^]表示匹配任何不为“^”的字符

     

    转义字符类

    d  这个正则表达式与[0-9]作用相同,都是匹配一个数字(要匹配d,应该使用正则表达式\d)

    w  与[0-9A-Za-z]相同,都表示匹配一个数字或字母字符

    s   意味着匹配一个空字符(空格、制表符,回车或者换行)

             另外

    •   D  与[^0-9]相同,表示匹配一个非数字字符
    • l  W  与[^0-9A-Za-z]相同,表示匹配一个非数字同时不是字母的字符
    • l  S    表示匹配一个非空字符

     

     

    重复

    在字符或字符集之后,你可以使用{ }大括号来表示重复

    • l  a{1}与a意思相同
    • l  a{3}匹配“aaa”字符串
    • l  a{2}表示匹配字符串“a{2}”
    • l  在字符类中,大括号没有特殊含义。[{}]表示匹配一个{或者}

     

    指定重复次数范围

    重复次数是可以指定范围的

    •   x{4,4} 与x{4}相同
    •  colou{0,1}r 表示匹配colour或者 color
    •   a{3,5} aaaaa aaaa aaa
    •   范围可以是开区间:a{1,}匹配一个或以上连续字符a

    注意:这样的正则表达式会优先匹配最长字符串

     

     

    关于重复的转义字符

    •   ?与{0,1}相同,如:colou?r表示匹配colour或者color
    •   *与{0,}相同,如:   .*匹配任意内容
    •   +与{1,}相同

    此外:

    •   ?*+表示匹配字符串“?*+”
    •   [?*+]表示匹配一个?,或者一个*,或者一个+

     

    非贪婪匹配

    正则表达式“.*”表示匹配双引号,之后是任意内容,之后再匹配一个双引号。

    •   d{4,5}?表示匹配dddd或者ddddd。和d{4}一样
    •   Colou??r与colou{0,1}r相同,表示找到color或者colour,与colou?r一样
    •   “.*?”表示先匹配一个双引号,然后匹配最少的字符,然后是一个双引号

     

     

    选择匹配

    用“|”来分隔可以匹配不同的选择

    •   cat|dog表示匹配“cat”或者“dog”
    •   red|blue|或者red||blue或者|red|blue都表示匹配red或者blue或者一个空自负串
    •   a|b|c与[abc]相同
    •   [cat|dog]表示匹配a或者c或者d或者g或者o或者t或者一个分隔符“|”

     

     

    分组(用括号表示分组)

    •   (w*)ility 与 W*ility相同,都是匹配一个由“ility”结尾的单词
    •   [()]表示匹配任意一个左括号或者一个右括号

    分组可以包括空字符串:

    •   (red|blue)表示匹配red或者blue或者是一个空字符串
    •   Abc()def与abcdef相同

    在分组的基础上使用重复:

    •   (red|blue)?与(red|blue|)相同
    • l  w+(s+w+)表示匹配一个或多个由空格分隔的单词

     

    单次分隔符

    •   表示匹配一个单词分隔符
    •   www表示匹配一个三字母单词
    •   aa表示匹配两个a中间有一个单词分隔符。这个正则表达式永远不会有匹配的字符,无论输入怎样的文本。

     

    单词分隔符本身并不是字符,它的宽度为0

    下列正则表达式的作用不同

    •   (cat)
    •   (cat)
    •   (cat)
    •   (cat)

     

    换行符

    注意:所有的文本都是以一行结束的,而不是以换行符结束。

    •   ^表示匹配行的开始位置
    •   $表示匹配行的结束位置
    •   ^&表示一个空行
    •   ^.*&表示匹配全为内容,因为行的开始符号也是一个字符,“.”会匹配这个符号。找到单独的一行,可以使用^.*?$
    •   ^$表示匹配字符串“^$”
    •   [$]表示匹配一个$。但是,[^]不是合法的正则表达式。记住在方括号中,字符有不同的特殊含义,要想在方括号内匹配^,必须用[^]

    与字符分割符一样,换行符也不是字符。它的宽度为0

    如下所示的正则表达式作用不同:

    •   (^cat)$
    •   (^cat$)
    •   ^(cat)$
    •   ^(cat$)

     

     

    文本 分界

    在很多的正则表达式实现中,将^和$作为文本的开始符号和结束符号。

    还有一些实现中,用A和z作为文本的开始与结束符号

     

     

    https://www.cnblogs.com/sthinker/p/6985112.html

    •                    
  • 相关阅读:
    C++ String详解
    乏力的编码很累,这里有私货..
    给自己~~微语&&歌单
    2019CSP-J第二轮 B题C题
    HDU 3966 树链剖分+树状数组 模板
    HDU 2255 KM算法 二分图最大权值匹配
    HDU 4280 ISAP+BFS 最大流 模板
    HDU 6181 第k短路
    假装会python--爬取贴吧正文
    HDU 6170 dp
  • 原文地址:https://www.cnblogs.com/siduoxiaohua/p/10248399.html
Copyright © 2011-2022 走看看