正则表达式

[推荐练习](https://www.hackerrank.com/domains/regex)

.

可以匹配任何内容,除了换行符 如果想在字符串中匹配`.`则需要转义`\.`,在Java中则需`\\.`

举例
A.B.C.D.可以匹配A+B-C=DE
...\\....\\....\\....可以匹配abc.def.ghi.jkx(其中包含的字母可用任意字符替换)

\d与\D

`\d`可以匹配数字,`\D`匹配除了数字以外的所有字符

举例
xxXxxXxxxx, 其中x代表数字, X代表非数字
表达式可写作\\d{2}\\D\\d{2}\\D\\d{4},其中{n}是标志限定符,\\d{n}就要匹配n次\\d

\s与\S

`\s`可以匹配空格,`\S`匹配除了空格以外的所有字符

举例
XXxXXxXX,其中x代表空格,X代表非空格
表达式写作\\S{2}\\s\\S{2}\\s\\S{2}

\w与\W

`\w`可以匹配word(字母数字下划线),`\W`匹配除了字母数字下划线以外的所有字符

举例
xxxXxxxxxxxxxxXxxx,其中x代表字母数字下划线,X代表除此以外的所有字符
表达式可写作\\w{3}\\W\\w{10}\\W\\w{3}

^与$

`^`可以匹配字符串头,`$`匹配字符串尾

举例

  1. Xxxxx.,其中X表示数字,x表示word,这个字符串必须以数字开头,以字符.结尾,字符串长度需为6
    表达式可写作^\\d\\w{4}\\.$
  2. 字符串由大小写字母组成并以s结尾
    表达式可写作^[a-zA-Z]*s$

[]

`[]`可以匹配括号内的所有字符

举例
有字符串S:长度为6;第一个字符为1,2或3;第二个字符为1,2或0;第三个字符为下x,s或0;第四个字符为3,0,A或a;第五个字符为x,s或u;第六个字符为.或,
表达式可写作^[1-3][0-2][xs0][30Aa][xsu][.,]$

`^`在括号中使用时表示不接受括号表达式中的字符集合

举例

  1. 字符串长度大于等于5;第一个字符为小写字母;第二个字符为正数;第三个字符为非小写字母;第四个字符为非大写字母;第五个字符为大写字母
    表达式可写为^[a-z][1-9][^a-z][^A-Z][A-Z]
  2. 字符串长度为6;第一个字符不是数字;第二个字符不是aeiou;第三个字符不是bcDF;第四个字符不是\r\n\t\f或空格;第五个字符不是AEIOU;第六个字符不是.,
    表达式可写作^[^0-9][^aeiou][^bcDF][^\r\n\t\f ][^AEIOU][^.,]$

{x}

`{x}`匹配前面的模式x次

举例
字符串长度为45;前40个字符为字母(包含大小写)或偶数;后5个字符为奇数或空白字符
表达式可写作^[a-zA-Z02468]{40}[13579\r\n\t\f ]{5}$

{x,y}

`{x,y}`匹配前面的模式x~y次。`{x,}`至少匹配x次

举例
字符串1~2个数字开头;然后跟3或3个以上字母(包含大小写);以0~3个.结尾
表达式可写作^\\d{1,2}[a-zA-Z]{3,}\\.{0,3}$

*

匹配前面的模式0次或多次

举例
字符串以2个或2个以上数字开头;然后跟上0或多个小写字母;以0或多个大写字母结尾
表达式可写作^\\d{2,}[a-z]*[A-Z]*$

+

匹配前面的模式1次或多次

使用方法与*类似

\b

匹配单词边界

举例
匹配单词:以元音字母aeiouAEIOU开头;匹配的单词可以是任意长度,且由大小写字母组成;要匹配单词边界
表达式可写作:\\b[aeiouAEIOU][a-zA-Z]*\\b注意这里是匹配单词边界不是整个字符串所以不使用^$

()

捕获组

举例
匹配3个或以上的连续的ok
表达式可写作:(ok){3,}

| 替代匹配

匹配多项中的一项

举例
字符串需以 Mr., Mrs., Ms., Dr. or Er.开头;剩余部分为一个或多个英文字母
表达式可写作:^(Mr|Mrs|Ms|Dr|Er)\\.[a-zA-Z]+$

\group_number

匹配相同文本,group_number表示跟哪一个组进行匹配。比如\1就是和从左到右数,第一个捕获组()进行相同文本的匹配

举例

表达式可写作:^([a-z])(\\w)([\r\n\t\f ])(\\W)(\\d)(\\D)([A-Z])([a-zA-Z])([aeiouAEIOU])([^\r\n\t\f ])\\1\\2\\3\\4\\5\\6\\7\\8\\9\\10$

前向引用

(\\2two|(one))+可以匹配oneonetwo
(\\2amigo|(go!))+可以匹配go!go!amigo

例题

表达式可写作:^(\\2tic|(tac))+

正向预查

regex_1(?=regex_2)

匹配后面紧跟着regex_2的regex_1。需要注意的是:regex_2并不会被返回

举例
在字符串中匹配出后面紧跟oo的o
表达式可写作:o(?=oo)

(?<=regex_2)regex_1

查找regex_2后面的regex_1

举例

  1. (?<=[a-z])[aeiou],匹配he1o
  2. 匹配所有出现在奇数数字之后的数字,表达式写作:(?<=[13579])\\d

反向预查

regex_1(?!regex_2)

匹配后面不跟着regex_2的regex_1

举例

  1. c(?!o)可以匹配到chocolate
  2. 匹配字符串中所有后面不仅跟相同字符的字符,比如字符串goooo,可以匹配goooo
    表达式可写作:(.)(?!\\1)

(?<!regex_2)regex_1

匹配前面不是regex_2的regex_1

举例

  1. (?<![a-z])[aeiou],匹配he1o
  2. 匹配前面不是aeiouAEIOU的所有字符,表达式可写作:(?<![aeiouAEIOU]).


----------- 本文结束 -----------




0%