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,}$

     

  • 相关阅读:
    LNMP状态管理命令
    Gogs基本使用介绍
    初探Asp.net请求机制原理 1
    关于css定位
    JS不同浏览器图片载入处理
    js之队列01
    javascript 快速排序
    JavaScript prototype背后的工作原理
    关于javascrpt if快速判断说明
    js动态加载图片核心代码
  • 原文地址:https://www.cnblogs.com/Brambling/p/7501741.html
Copyright © 2011-2022 走看看