zoukankan      html  css  js  c++  java
  • 基本的正则表达式

    说到正则表达式,基本上不管什么编程语言都会支持并且用到正则表达式。

    可是,对于不太经常使用正则表达式的我来说,当每次用到正则表达式的时候都要去查一些符号的意思。

    所以也就有了这篇文章,本文不针对于任意一门语言来介绍,只是记录一些正则表达式常用的字符的含义。

    元字符:

    ^:表示匹配字符串的开始。

    “^A”:匹配以大写字母 ‘A’ 开始的字符串。

    例如:A、ABC、A123等。

     

    $:表示匹配字符串的结束。

    “A$”:匹配以大写字母 ‘A’ 为结尾的字符串。

    例如:A、CBA、123A等。

     

    ^$ 结合起来使用,用于控制匹配的开始直到结束的匹配规则。

    “^A123$”:匹配从开始到结尾为 ‘A123’ 的字符串。

    例如:A123

     

    *:表示匹配上一个字符零次或多次。

    “^ab*$”:匹配的字符串以字符 ‘a’ 开始,可以没有字符 ‘b’,也可以有多个。

    例如:a、ab、abbb等。

     

    +:表示匹配上一个字符一次或多次。

    “^ab+$”:匹配的字符串以字符 ‘a’ 开始,接着要有一个或多个字符 ‘b’。

    例如:ab、abbb等。

     

    ?:表示匹配上一个字符零次或一次。

    “^ab?$”:匹配的字符串以字符 ‘a’ 开始,可以没有字符 ‘b’,也可以有一个。

    例如:a、ab等。

     

    {n}:匹配上一个字符恰好n次。

    “^d{1,}.d{3}$”:匹配的数字字符串至少有1位整数位,且必须保留3位小数位。

    例如:1.101、100.000等。

     

    {n,}:匹配上一个字符至少n次及以上。

    “^d{1,}.d{2,}$”:匹配的数字字符串至少有1位整数位,且至少保留2位小数位。

    例如:10.10、100.10101等。

     

    {n,m}:匹配上一个字符至少n次,但不超过m次。

    “^d{1,}.d{2,3}$”:匹配的数字字符串至少有1位整数位,且至少保留2位小数位,至多保留3位小数位。

    例如:10.10、100.101等。

     

    *:等价于 “{0,}”

    +:等价于 “{1,}”

    ?:等价于 “{0,1}”

     

    ?:当字符 ‘?’ 紧跟在其他限定符(*,+,?,{n},{n,},{nm})后面时,匹配模式尽可能少的匹配所搜索的字符串。

    例如:对于字符串 “food”,’^o+?$’ 将匹配单个 ‘o’,而 ‘^o+$’ 将匹配所有的 ‘o’。

     

    |:表示“或”操作。

    “^th(e|is|at)$”:匹配的字符串以 ‘th’ 开始,以 ‘e’ 或 ‘is’ 或 ‘at’ 结束。

    例如:the、this、that等。

     

    .:匹配除 “ ” 之外的任意单个字符。

    “^.ear$”:匹配的字符串以除 ‘ ’ 之外的任意单个字符开始,以 ‘ear’ 结束。

    例如:hear、bear、‘ ear’(注:有一个空格)等。

     

    [xyz]:字符集合。匹配中括号中所包含的任意一个字符,相当于 “x|y|z”。

    例如:”[abc]”,可以匹配 “plain” 中的 “a”。

     

    [^xyz]:负值字符集合。匹配中括号中未包含的任意一个字符。

    例如:”[abc] ”,可以匹配 “plain” 中的 ”p”、”l”、”i”、”n”。

     

    [a-z]:字符范围。匹配指定范围内的任意字符。

    例如:”[a-z]”,可以匹配 “a” 到 “z” 范围内的任意小写字母。

     

    [^a-z]:负值字符范围。匹配任何不在指定范围内的字符。

    例如:”[^a-z]”,可以匹配任何不在 “a” 到 “z” 范围内的的任意字符。

     

    [a-zA-Z]:字符范围。匹配指定范围内的任意字符。

    例如:”[a-zA-Z]”, 可以匹配 “a” 到 “z” 范围内的任意小写字母,以及 “A” 到 “Z” 范围内的任意大写字母。

     

    [0-9]:字符范围。匹配指定范围内的任意数字字符。

    例如:”[0-9]”,可以匹配 “0” 到 “9” 范围内的任意一个数字。

     

    ([a-z]):匹配 "[a-z]" 并捕获这一匹配,进行存储供以后使用。要匹配圆括号字符,请使用 “(” 或 “)”。

    例如:^([a-z])\1$,可以匹配 "aa"、"bb" 等。

     

    (?:[a-z]):匹配 "[a-z]" 但不捕获这一匹配,不进行存储供以后使用。

    例如:^b(?:ored|read|road)$,可以匹配 "bored"、"bread"、"broad",比起 “^bored|bread|broad$” 更简略一些。

     

    (?=pattern):正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。但不捕获这一匹配,不进行存储供以后使用。

    例如:“Windows (?=95|98|NT|2000)” 能匹配 "Windows 2000" 中的 "Windows",但不能匹配 "Windows 3.1" 中的 "Windows"。

    预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

     

    (?!pattern):负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。但不捕获这一匹配,不进行存储供以后使用。

    例如:"Windows (?!95|98|NT|2000)" 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。

    预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

     

    PS:在方括号里使用字符 “^”,它就相当于逻辑非。

     

    转义字符:

    正则表达式中的反斜杠字符 “” 指示其后跟的字符是特殊字符,或应按原义解释该字符。

    例如:”n“ 匹配字符 "n"。” “ 匹配一个换行符。序列 '\' 匹配 "" 而 "(" 则匹配 "("。

     

    :匹配一个单词边界,也就是指单词和空格间的位置。

    例如: “er”,可以匹配 "never" 中的 “er”,但不能匹配 "verb" 中的 “er”。

    B:匹配非单词边界。

    例如:“erB”,可以匹配 "verb" 中的 “er”,但不能匹配 "never" 中的 “er”。

    d:匹配一个数字字符。它等价于 “[0-9]”。

    D:匹配一个非数字字符。它等价于 “[^0-9]”。

    s:匹配任何空白字符,包括空格、制表符、换页符等。它等价于 “[ f v]”。

    S:匹配任何非空白字符。它等价于 “[^ f v]”。

    w:匹配包括下划线的任何单词字符,以及数字字符。等价于 “[a-zA-Z0-9_]”。

    W:匹配任何非单词字符。它等价于 “[^A-Za-z0-9_]”。

    f:匹配一个换页符。

    匹配一个换行符。换行就是转到下一行输出。

    匹配一个回车符。回车和换行不同,回车效果是输出回到本行行首。

    匹配一个水平制表符。一般来说,就相当于按下键盘的TAB键。

    v:匹配一个垂直制表符。它的作用是让 ‘v’ 后面的字符从下一行开始输出,且开始的列数为 ‘v’ 前一个字符所在列的后面一列。

     

    偶尔有看到正则里面有 “12”,这种的表示方法。

    "1":表示重复正则第一个圆括号内匹配到的内容。

    “2”:表示重复正则第二个圆括号内匹配到的内容。

    例如有以下正则表达式 :

    “^([0-9])([a-z])\1\2$”

    那么它能匹配的字符串为:

    "1a1a"、”1b1b“、"2c2c" 等。

    意思就是括号里面的正则表达式会被捕获,可以理解为拷贝(Ctrl+C),而 "1" 就表示粘贴第一个捕获的正则表达式(Ctrl+V),"2" 就是粘贴第二个被捕获的正则表达式,以此类推。还有一个 "",表示所有捕获的正则表达式。

    需要注意的是,这里为什么不会匹配 "1a2b" 这类的字符串,因为前面说到是类似于复制粘贴捕获的正则表达式,所以它匹配的字符串也要与捕获的正则表达式的匹配项相同。

     

    下面列出一些可以直接拿来用的正则表达式,以后也会继续补充:

    不限长度纯数字字符串:

    ^[0-9]*$ 或者 ^\d*$ (注:这里的第一个反斜杠 "" 是为了转义,后面就不在提了)

    密码(以字母开头,长度在6~16之间,只能包含字母、数字和下划线):

    ^[a-zA-Z]\w{5,16}$

    日期格式:

    ^d{4}-d{1,2}-d{1,2}$

    汉字:

    ^[u4e00-u9fa5]{0,}$

     

  • 相关阅读:
    LeetCode题解之Flipping an Image
    LeetCode 之Find Minimum in Rotated Sorted Array
    LeetCode题解Transpose Matrix
    LeetCode 题解之Minimum Index Sum of Two Lists
    LeetCode题解之Intersection of Two Linked Lists
    LeetCode 题解之Add Two Numbers II
    LeetCode题解之Add two numbers
    href="#"与href="javascript:void(0)"的区别
    有关ie9 以下不支持placeholder属性以及获得焦点placeholder的移除
    ie7下属性书写不规范造成的easyui 弹窗布局紊乱
  • 原文地址:https://www.cnblogs.com/Brambling/p/7501741.html
Copyright © 2011-2022 走看看