正则表达式

元字符:

^:表示匹配字符串的开始。

“^A”:匹配以大写字母 ‘A’ 开始的字符串。

例如:A、ABC、A123等。

 

$:表示匹配字符串的结束。

“A$”:匹配以大写字母 ‘A’ 为结尾的字符串。

例如:A、CBA、123A等。

 

^ 与 $ 结合起来使用,用于控制匹配的开始直到结束的匹配规则。

“^A123$”:匹配从开始到结尾为 ‘A123’ 的字符串。

例如:A123

 

*:表示匹配上一个字符零次或多次。

“^ab*$”:匹配的字符串以字符 ‘a’ 开始,可以没有字符 ‘b’,也可以有多个。

例如:a、ab、abbb等。

 

+:表示匹配上一个字符一次或多次。

“^ab+$”:匹配的字符串以字符 ‘a’ 开始,接着要有一个或多个字符 ‘b’。

例如:ab、abbb等。

 

?:表示匹配上一个字符零次或一次。

“^ab?$”:匹配的字符串以字符 ‘a’ 开始,可以没有字符 ‘b’,也可以有一个。

例如:a、ab等。

 

{n}:匹配上一个字符恰好n次。

“^\d{1,}\.\d{3}$”:匹配的数字字符串至少有1位整数位,且必须保留3位小数位。

例如:1.101、100.000等。

 

{n,}:匹配上一个字符至少n次及以上。

“^\d{1,}\.\d{2,}$”:匹配的数字字符串至少有1位整数位,且至少保留2位小数位。

例如:10.10、100.10101等。

 

{n,m}:匹配上一个字符至少n次,但不超过m次。

“^\d{1,}\.\d{2,3}$”:匹配的数字字符串至少有1位整数位,且至少保留2位小数位,至多保留3位小数位。

例如:10.10、100.101等。

 

*:等价于 “{0,}”

+:等价于 “{1,}”

?:等价于 “{0,1}”

 

?:当字符 ‘?’ 紧跟在其他限定符(*,+,?,{n},{n,},{nm})后面时,匹配模式尽可能少的匹配所搜索的字符串。

例如:对于字符串 “food”,’^o+?$’ 将匹配单个 ‘o’,而 ‘^o+$’ 将匹配所有的 ‘o’。

 

|:表示“或”操作。

“^th(e|is|at)$”:匹配的字符串以 ‘th’ 开始,以 ‘e’ 或 ‘is’ 或 ‘at’ 结束。

例如:the、this、that等。

 

.:匹配除 “\n” 之外的任意单个字符。

“^.ear$”:匹配的字符串以除 ‘\n’ 之外的任意单个字符开始,以 ‘ear’ 结束。

例如:hear、bear、‘ ear’(注:有一个空格)等。

 

[xyz]:字符集合。匹配中括号中所包含的任意一个字符,相当于 “x|y|z”。

例如:”[abc]”,可以匹配 “plain” 中的 “a”。

 

[^xyz]:负值字符集合。匹配中括号中未包含的任意一个字符。

例如:”[abc] ”,可以匹配 “plain” 中的 ”p”、”l”、”i”、”n”。

 

[a-z]:字符范围。匹配指定范围内的任意字符。

例如:”[a-z]”,可以匹配 “a” 到 “z” 范围内的任意小写字母。

 

[^a-z]:负值字符范围。匹配任何不在指定范围内的字符。

例如:”[^a-z]”,可以匹配任何不在 “a” 到 “z” 范围内的的任意字符。

 

[a-zA-Z]:字符范围。匹配指定范围内的任意字符。

例如:”[a-zA-Z]”, 可以匹配 “a” 到 “z” 范围内的任意小写字母,以及 “A” 到 “Z” 范围内的任意大写字母。

 

[0-9]:字符范围。匹配指定范围内的任意数字字符。

例如:”[0-9]”,可以匹配 “0” 到 “9” 范围内的任意一个数字。

 

([a-z]):匹配 "[a-z]" 并捕获这一匹配,进行存储供以后使用。要匹配圆括号字符,请使用 “\(” 或 “\)”。

例如:^([a-z])\\1$,可以匹配 "aa"、"bb" 等。

 

(?:[a-z]):匹配 "[a-z]" 但不捕获这一匹配,不进行存储供以后使用。

例如:^b(?:ored|read|road)$,可以匹配 "bored"、"bread"、"broad",比起 “^bored|bread|broad$” 更简略一些。

 

(?=pattern):正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。但不捕获这一匹配,不进行存储供以后使用。

例如:“Windows (?=95|98|NT|2000)” 能匹配 "Windows 2000" 中的 "Windows",但不能匹配 "Windows 3.1" 中的 "Windows"。

预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

 

(?!pattern):负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。但不捕获这一匹配,不进行存储供以后使用。

例如:"Windows (?!95|98|NT|2000)" 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。

预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

 

PS:在方括号里使用字符 “^”,它就相当于逻辑非。

 

转义字符:

正则表达式中的反斜杠字符 “\” 指示其后跟的字符是特殊字符,或应按原义解释该字符。

例如:”n“ 匹配字符 "n"。”\n“ 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。

 

\b:匹配一个单词边界,也就是指单词和空格间的位置。

例如: “er\b”,可以匹配 "never" 中的 “er”,但不能匹配 "verb" 中的 “er”。

\B:匹配非单词边界。

例如:“er\B”,可以匹配 "verb" 中的 “er”,但不能匹配 "never" 中的 “er”。

\d:匹配一个数字字符。它等价于 “[0-9]”。

\D:匹配一个非数字字符。它等价于 “[^0-9]”。

\s:匹配任何空白字符,包括空格、制表符、换页符等。它等价于 “[ \f\n\r\t\v]”。

\S:匹配任何非空白字符。它等价于 “[^ \f\n\r\t\v]”。

\w:匹配包括下划线的任何单词字符,以及数字字符。等价于 “[a-zA-Z0-9_]”。

\W:匹配任何非单词字符。它等价于 “[^A-Za-z0-9_]”。

\f:匹配一个换页符。

\n:匹配一个换行符。换行就是转到下一行输出。

\r:匹配一个回车符。回车和换行不同,回车效果是输出回到本行行首。

\t:匹配一个水平制表符。一般来说,就相当于按下键盘的TAB键。

\v:匹配一个垂直制表符。它的作用是让 ‘\v’ 后面的字符从下一行开始输出,且开始的列数为 ‘\v’ 前一个字符所在列的后面一列。

 

偶尔有看到正则里面有 “\1\2”,这种的表示方法。

"\1":表示重复正则第一个圆括号内匹配到的内容。

“\2”:表示重复正则第二个圆括号内匹配到的内容。

例如有以下正则表达式 :

“^([0-9])([a-z])\\1\\2$”

那么它能匹配的字符串为:

"1a1a"、”1b1b“、"2c2c" 等。

意思就是括号里面的正则表达式会被捕获,可以理解为拷贝(Ctrl+C),而 "\1" 就表示粘贴第一个捕获的正则表达式(Ctrl+V),"\2" 就是粘贴第二个被捕获的正则表达式,以此类推。还有一个 "\0",表示所有捕获的正则表达式。

需要注意的是,这里为什么不会匹配 "1a2b" 这类的字符串,因为前面说到是类似于复制粘贴捕获的正则表达式,所以它匹配的字符串也要与捕获的正则表达式的匹配项相同。

 

下面列出一些可以直接拿来用的正则表达式,以后也会继续补充:

不限长度纯数字字符串:

^[0-9]*$ 或者 ^\\d*$ (注:这里的第一个反斜杠 "\" 是为了转义,后面就不在提了)

密码(以字母开头,长度在6~16之间,只能包含字母、数字和下划线):

^[a-zA-Z]\\w{5,16}$

日期格式:

^\d{4}-\d{1,2}-\d{1,2}$

汉字:

^[\u4e00-\u9fa5]{0,}$

 

转载自:https://www.cnblogs.com/Brambling/p/7501741.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值