正则表达式

. 1个字符。
? 可能没有,也可能有一个。0或1个字符。

  • 任意个前面的字符。0到*。
  • 至少一个,没有?给你加一个。1到*。

  • 正则表达式可以只包含普通的文本,代表去精确匹配这个文本。

  • 正则表达式默认是区分大小写的,所以song 不会匹配 "Song" 。但是大部分的正则表达式
    实现都提供了一个选项表示不区分大小写。

  • . 用来匹配一个任意字符。
    多个连续的 . 可以匹配多个连续的任意字符。

  • . 在正则表达式中含有特殊的意义,是一个特殊的字符。\ 也是特殊字符,可以对特殊
    字符起到转义作用。如果你想匹配的是一个真正的" . "字符,需要在. 前面加上\ 对字符
    进行转义。所以, . 表示真正的" . "字符。

  • 匹配一组(几个)特定的字符可以使用 [ 和 ] 元字符。
    [ab] 会匹配" a "或者" b "。

  • 字符组区间。
    c[a‐z]t 表示以 "c" 开头,"t" 结尾,中间为字母 "a" - "z" 的任意一个字母。

  • [a‐z] 匹配所有的小写字母,而 [^a‐z] 匹配所有的不是小写字母的字符。
    ^ 字符是将字符集合中的所有字符都取消匹配。

  • [\b] 退格符
    \f 换页符
    \n 换行
    \r 回车
    \t 制表符
    \v 垂直制表符
    例如\r\n 将匹配一个回车换行组合,在 Windows 中表示一个文件换行。
    在 Linux 和 Unix 系统中,只需要使用 \n 即可。

  • \d 任何数字 (同 [09])
    \D 任何非数字 (同 [^09])
    \w 所有的文字数字式字符:大小写字母、数字和下划线 (同 [azAZ09_])
    \W (同 [^azAZ09_])
    \s 所有的空白字符 (同 [\f\n\r\t\v])
    \S 所有的非空白字符 (同 [^\f\n\r\t\v])

  • + 匹配【一个】或【多个】字符。例如, a 将匹配"a",而a+ 则匹配一个或者多个"a"。
    在字符集合上使用+ 的时候,需要将+ 符号放在集合外面。c[0‐9]+t 表示以 "c"开头,以"t"结尾,中间为一个或多个数字的字符串。
    [0‐9+] 也是一个合法的正则表达式,但它表示一个包含 " 0 " - " 9 " 和 " + " 符号的字符集合。

  • 一般的,元字符如. 和+ 等用于字符集合的时候是作为字面含义使用的,因此没有必要转义。但是对其进行转义也没错,所以, [0‐9+] 和[0‐9+] 的功能是一样的。

  • * 匹配【零个】或【多个】「某字符」的时候,可以将 * 元字符放在「某字符」后面。

  • ? 匹配【零个】或【一个】字符。所以, ? 非常适合于在文本中匹配一个可选的字符。

  • 使用匹配次数。正则表达式允许指定匹配的次数。次数可以在“ { ”和“ } ”之间指定。

  • {3} 将匹配 3 次前面出现的字符或集合。
    {2,} 意味着匹配 2次或者更多次。
    {2,3} 意味着最少匹配 2次,最多匹配3次。

  • 贪婪匹配。
    s.g并没像预想中的匹配两个" song ",而是匹配了第一个" s "和最后一个 " g "之间的所有文本。
    song xiao song
    因为
    和+都是贪婪匹配。也就是说,正则表达式总是寻找最大的匹配,而不是最小的,这是故意设计的。

  • ?号用于构建非贪婪匹配。
    非贪婪量词是在量词后面加上?
    贪婪量词 非贪婪量词
    * *?
    + +?
    {n,} {n,}?

  • 字符串边界匹配的元字符是^和$,分别用于字符串的开始和结束。
    ^如果位于集合开始处的话,则表示否定;如果在集合外面,则将匹配字符串的开始位置。
    大家可以试试[0-9]和[0-9]的区别。

  • 模式重复。子表达式。
    通过(和)括起来的就是子表达式。
    \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
    (\d{1,3}.){3}\d{1,3}

  • 模式分组。子表达式。
    19|20\d{2}用来定位一个前两个数字只能为19或者20的四位数的年份。但是很显然这个正则并没有实现预想的效果。|操作符从左到右读取,将19|20\d{2}分析为要么19,要么20\d{2},也就是匹配数字19或者20开头的四个数字字符。
    解决方法是将19|20作为一个子表达式,(19|20)\d{2}就能够匹配所有19和20开头的四个数字了。

  • 嵌套子表达式。
    匹配所有的合法 IP 地址:(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))

  • 后向引用。(用时再看)
    采用

    开始而采用

    的标题标签是非法的,但是现在的模式可以匹配。问题在于匹配的第二个部分(匹配结束的标签)没有办法知道匹配第一部分(匹配开始的标签)是什么。这时候就需要后向引用了。

你可能感兴趣的:(正则表达式)