美文网首页
正则表达式

正则表达式

作者: 历奇 | 来源:发表于2017-05-15 12:31 被阅读0次

    . 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]))

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

    相关文章

      网友评论

          本文标题:正则表达式

          本文链接:https://www.haomeiwen.com/subject/cfchxxtx.html