正则表达式
正则表达式

字符串类正则表达式示例

\b\w{6}\b //匹配刚好6个字符的单词
windows\d+  //windows后面带至少一位数字,如windows7/windows98/windows2000
^\w+  //从开头开始的第一个单词
\S+ //匹配不包含空白符的字符串。
<a[^>]+>  //匹配用尖括号括起来的以a开头的字符串,不包括<a>

正则表达式基本规则

字符含义(作用)
\b单词的开头或结尾
^匹配用来查找的字符串的开头
$匹配用来查找的字符串的结尾
.匹配除了换行符以外的任意字符
*指定*前边的内容可以连续重复使用任意次以使整个表达式得到匹配
.*任意数量的不包含换行的字符
\d一位数字
\d{n}n位数字
\d{m,n}最少m位,最多n位的数字
?重复0次或1次
\d+匹配1个或更多连续的数字。这里的+是和类似的元字符,不同的是匹配重复任意次(可能是0次),而+则匹配重复1次或更多次
\s匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等
\w匹配字母或数字或下划线或汉字等
\.匹配句点.
\*匹配星号*
[]匹配括号里面的任意字符
[aeiou]匹配元音字母a或e或i或o或u
[?.!]匹配标点符号?.!
[0-9]等同d:一位数字
[a-z0-9A-Z_]完全等同于w(如果只考虑英文的话)
\丨或者(表示分支条件)
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
  • 分组
    ++ 使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。后向引用用于重复搜索前面某个分组匹配的文本。例如,\1代表分组1匹配的文本。难以理解?请看示例:

\b(\w+)\bs+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty。这个表达式首先是一个单词,也就是单词开始处和结束处之间的多于一个的字母或数字(\b(\w+)\b),这个单词会被捕获到编号为1的分组中,然后是1个或几个空白符(\s+),最后是分组1中捕获的内容(也就是前面匹配的那个单词)(\1)。

你也可以自己指定子表达式的组名。要指定一个子表达式的组名,请使用这样的语法:(?<Word>w+)(或者把尖括号换成'也行:(?'Word'\w+)),这样就把w+的组名指定为Word了。要反向引用这个分组捕获的内容,你可以使用\k<Word>,所以上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b。

使用小括号的时候,还有很多特定用途的语法。下面列出了最常用的一些:

分类代码/语法说明
捕获(exp)匹配exp,并捕获文本到自动命名的组里
(?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言(?=exp)匹配exp前面的位置
(?<=exp)匹配exp后面的位置
(?!exp)匹配后面跟的不是exp的位置
(?<!exp)匹配前面不是exp的位置
注释(?#comment)这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

https://deerchao.cn/tutorials/regex/regex.htm

数字类正则表达式示例

  • 电话号码
0\d\d-\d\d\d\d\d\d\d\d  //数字0开头+2位数字+“-”+8位数字,不排除“-”前面区号是:00*或者000
0\d{2}-\d{8}  //数字0开头+2位数字+“-”+8位数字,不排除“-”前面区号是:00*或者000
0\d{2,3}-\d{7,8}  //数字0开头+2~3位数字+“-”+7~8位数字,不排除“-”前面区号是:00**或者000*或者0000
\(?0\d{2}[) -]?\d{8}  //前面有或者没有“(”+然后0+然后两位数字+有或者没有“)”或者“-” +8位数字,不排除非法的(01012345678 或者 010)12345678
  • IP地址
([0-9]+\.){3}[0-9]+  //3个“数字0-9至少一位,加上点”,后面再跟至少一位的一个数字,不排除非法的256.257.258.9999等
(\d{1,3}\.){3}\d{1,3} //3个1-3位数字加句点,后面再跟1-3位数字,同上不排除非法的256.257.258.9999等
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) //