• 正则表达式


    1.特殊字符

        : 单词的开头和结尾,也就是单词的分界处。匹配一个位置。

      ^ :匹配字符串开始。有些正则表达式处理工具还有一个处理多行的选项。如果选中了这个选项,^和$的意义就变成了匹配行的开始处和结束处。

      $ :匹配字符串结束

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

      * :*前边的内容可以连续重复使用任意次以使整个表达式得到匹配(可以是0次)。

      + :+前面的内容可以连续重复使用1次或者多次

       :重复0次或一次

      {n}:重复n此

      {n,}:重复n次或更多次

      {n,m}:重复n次到m次

      d :匹配一位数字(0,1,2...)

      -   :只匹配它本身

      s  :匹配任意的空白符,包括空格,制表符(tab),换行符,中文全角空格等。

       :匹配字母或数字或下划线或汉字等。

          :如果查找特殊字符本身,前面加上  

      你想匹配没有预定义元字符的字符集合,你只需要在方括号里列出它们就行了,像[aeiou]就匹配任何一个英文元音字母

      [.?!]匹配标点符号(.?!)

      一个字符范围,像[0-9]代表的含意与d就是完全一致的:一位数字

      

    2.分枝条件

    是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用|把不同的规则分隔开。

    d{5}-d{4}|d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字。之所以要给出这个例子是因为它能说明一个问题:使用分枝条件时,要注意各个条件的顺序。如果你把它改成d{5}|d{5}-d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。原因是匹配分枝条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。

    3.分组

    重复多个字符,用小括号来指定子表达式(也叫做分组)

    例子:(d{1,3}.){3}d{1,3}是一个简单的IP地址匹配表达式。要理解这个表达式,请按下列顺序分析它:d{1,3}匹配1到3位的数字,(d{1,3}.){3}匹配三位数字加上一个英文句号(这个整体也就是这个分组)重复3次,最后再加上一个一到三位的数字(d{1,3})。

    4.反义

    W(大写):匹配任意不是字母,数字,下划线,汉字的字符

    S(大写):匹配任意不是空白符的字符

    D:匹配任意非数字的字符

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

    [^x]:匹配除了x以外的任意字符

    [^aeiou]:匹配除了aeiou这几个字母以外的任意字符

      例子:S+匹配不包含空白符的字符串。

    <a[^>]+>匹配用尖括号括起来的以a开头的字符串

    5.后向引用

    使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

    后向引用用于重复搜索前面某个分组匹配的文本。例如,1代表分组1匹配的文本。

    自定义表达式的组名:(?<Word>w+)(或者把尖括号换成'也行:(?'Word'w+)),这样就把w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用k<Word>,所以上一个例子也可以写成这样:(?<Word>w+)s+k<Word>。

    小括号的用法:

    捕获:

    (exp):匹配exp,并捕获文本到自动命名的组里

    (?<name>exp):匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)

    (?:exp):匹配exp,不捕获匹配的文本,也不给此分组分配组号

    零宽断言:

    (?=exp):匹配exp前面的位置

    (?<=exp):匹配exp后面的位置

    (?!exp):匹配后面跟的不是exp的位置

    (?<!exp)匹配前面不是exp的位置

    注释:

    (?#comment):这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

    6.零宽断言

    接下来的四个用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。

    (?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。比如w+(?=ing),匹配以ing结尾的单词的前面部分(除了ing以外的部分),如查找I'm singing while you're dancing.时,它会匹配sing和danc。

    (?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的后面能匹配表达式exp。比如(?<=re)w+会匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

     http://deerchao.net/tutorials/regex/regex.htm#grouping

  • 相关阅读:
    JavaScript tips:innerHTML与document.write的差异
    JavaScript tips:window.onload与$(document).ready()的差异
    剑指offer:重建二叉树
    算法:数组去重
    JavaScript tips:Function调用模式对this的影响
    P1217 [USACO1.5]回文质数 Prime Palindromes
    HDU 1002 A + B Problem II
    单片机及其工作原理粗略介绍
    Markdown格式及语法
    Kubernetes入门(三)——使用Deployment运行一个无状态应用
  • 原文地址:https://www.cnblogs.com/liu-Gray/p/5222316.html
Copyright © 2020-2023  润新知