正则表达式

介绍

正则表达式也是用来进行文本匹配的工具
能更精确地描述你的需求——当然,代价就是更复杂
比如你可以编写一个正则表达式,用来查找所有以 0 开头,后面跟着 2-3 个数字,然后是一个连字号“-”,最后是 7 或 8 位数字的字符串(像 010-12345678 或 0376-7654321)。

入门

元字符

  • \b
    \b 是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b 并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置
    当查找的对象为 hi 时,包含此对象的比如 him,history 等也会被找出来,所以准确查找 hi 时,可以使用 \bhi\b

  • . (英文句号)
    元字符,匹配除了换行符以外的任意字符

  • *
    元字符,指定 * 前边的内容可以连续重复使用任意次以使整个表达式得到匹配

    . _ 代表任意数量的不包含换行的字符
    要找的是 hi 后面不远处跟着一个 Lucy,你应该用 \bhi\b._\bLucy\b

  • \d
    元字符,匹配一位数字(0,或 1,或 2,或……)

    \d+ 匹配 1 个或更多连续的数字。这里的 + 是和 * 类似的元字符,不同的是 * 匹配重复任意次(可能是 0 次),而 + 则匹配重复 1 次或更多次

  • -
    连字符,只匹配它本身

    0\d\d-\d\d\d\d\d\d\d\d 匹配这样的字符串:以 0 开头,然后是两个数字,然后是一个连字号 “-”,最后是 8 个数字(也就是中国的电话号码。当然,这个例子只能匹配区号为 3 位的情形)
    为了避免那么多烦人的重复,我们也可以这样写这个表达式:0\d{2}-\d{8}。这里 \d 后面的{2}({8})的意思是前面\d 必须连续重复匹配 2 次(8 次)

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

  • \w
    匹配字母或数字或下划线或汉字等

    \ba\w\b 匹配以字母 a 开头的单词——先是某个单词开始处 (\b),然后是字母 a ,然后是任意数量的字母或数字 (\w),最后是单词结束处 (\b)
    \b\w{6}\b 匹配刚好 6 个字符的单词

  • ^

    匹配字符串的开始

  • $

    匹配字符串的结束
    元字符 ^(和数字 6 在同一个键位上的符号)和 $ 都匹配一个位置,这和 \b 有点类似。^ 匹配你要用来查找的字符串的开头,$ 匹配结尾
    比如一个网站如果要求你填写的 QQ 号必须为 5 位到 12 位数字时,可以使用:^\d{5,12}$

  • 查找元字符本身时,使用 \ 来进行字符转义

    例如:deerchao.net 匹配 deerchao.net,C:\Windows 匹配 C:\Windows

重复

  • *

    重复零次或更多次

  • +

    重复一次或更多次

  • ?

    重复零次或一次

  • {n}

    重复 n 次

  • {n,}

    重复 n 次或更多次

  • {n,m}

    重复 n 到 m 次

[参考资料]正则表达式入门教程
StackFlow


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!