正则表达式

1. 语法
1.1 元字符
字符描述
\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如: \n 匹配一个换行符
^匹配输入字符串的开始位置
$匹配输入字符串的结束位置
*匹配前面的子表达式零次或多次。例如 zo*能匹配 z 以及 zoo
+匹配前面的子表达式一次或多次。例如 zo*能匹配 zo 以及 zoo,不能匹配 z
?匹配前面的子表达式零次或一次。例如 do(es)?可以匹配 do 或 does
{n}n是非负整数。匹配确定的n次。例如 o{2} 不能匹配 Bob 中的 o,但是能匹配 food 中的两个 o
{n,}n是一个非负整数。至少匹配n次。例如 o{2} 不能匹配 Bob 中的 o,但是能匹配 fooooood 中所有 o
{n,m}m和n均为非负整数,n<=m。最少匹配 n 次且最多匹配 m 次,注意逗号和两个数之间不能有空格
?当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少得匹配所搜索的字符串。默认的贪婪模式则尽可能多地匹配所搜索的字符串
.匹配除换行符(\r,\n)之外的任何单个字符。如果要匹配包括换行符在内的任何字符,可使用(.|\n)这种模式
(pattern)子表达式,匹配pattern并获取这一匹配。所获取的匹配从产生的Matches集合中得到(用 \n n为数字表示前面第n个组的结果),匹配圆括号需要转义
(?:pattern)匹配pattern但是不获取匹配结果
(?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,非获取匹配。例如 "Windows(?=95|98|NT|2000)"能匹配 “Windows2000"中的Windows 但是不能匹配"Windows3.1"中的"Windows”。预查不消耗字符,即预查的下一次匹配不是从包含预查的字符之后开始
(?!pattern)正向否定预查,非获取匹配。在任何不匹配pattern的字符串开始处匹配查找字符串。例如 "Windows(?=95|98|NT|2000)"能匹配 “Windows3.1"中的Windows 但是不能匹配"Windows2000"中的"Windows”
(?<=pattern)反向肯定预查,与正向肯定预查类似,只是方向相反。例如 “(?<95|98|2000)Windows"能匹配"2000Windows"中的"Windows”,但不能匹配"3.1Windows"中的"Windows"
(?<!pattern)反向否定预查,与正向否定预查类似
x|y匹配 x 或 y
[xyz]字符集合。匹配所包含的任意一个字符
[^xyz]负值字符集合。匹配未包含的任意字符
[a-z]字符范围。匹配指定范围内的任意字符
[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符
\b匹配一个单词边界。例如er\b可以匹配never中的er,匹配不到verb中的er
\B匹配非单词边界
\cx匹配由x指明的控制字符。(????????)
\d匹配一个数字字符。等价于[0-9]
\D匹配一个非数字字符。等价于[^0-9]
\f匹配一个换页符。等价于 \x0a和\cL
\n匹配一个换行符
\r匹配一个回车符
\s匹配任何空白字符,包括空格、制表符、换页符等。等价于[ \f\n\r\t\v]
\S匹配任何非空白字符
\t匹配一个制表符
\v匹配一个垂直制表符
\w匹配字母数字下划线
\W匹配非字母、数字、下划线
\xn匹配n,其中n为十六进制转义值,必须是确定的两个数字长。例如 \x41匹配 “A”
\un匹配n, 其中n是一个用4个十六进制数字表示的Unicode字符。
1.2 运算优先级

最高到最低如下:

运算符描述
\转义符
(), (?: ) ,(?=),[]圆括号和方括号
*,+,?,{n},{n,},{n,m}限定符
^,$,\任何元字符、任何字符定位点和序列
|或操作
1.3 匹配规则
  • 基本模式匹配
    什么叫模式?就是一组描述字符串特征的字符,是正则表达式最基本的元素。
    例如:^once可匹配once开头的字符串,once可匹配出现once的字符串
  • 字符簇
    例如:元音字符的字符簇 [AEIOUaeiou],小写字母的字符簇[a-z]
    需要注意的是这个模式只能表示一个字符,例如 ^[a-z][0-9]$匹配由一个小写字母和一个数字组成的字符串,可匹配 “t5”,但不能匹配诸如"tt5"等。
    注意:以[1-5]这种方式指定范围时,开始值和结束值两者都包括在范围内,按照Unicode排序顺序,开始值必须在结束值的前面。
  • 确定重复出现
    跟在字符或字符簇后面的花括号{}用来确定前面的内容重复出现的次数,例如:
    ^a{4}$ 匹配 aaaa
    ^a{2,4}$ 匹配 aa、aaa 或者 aaaa
    ^a{2,}$ 匹配 包含多余两个a的字符串
2. 示例

以下两个例子很好得说明了正向肯定预查的用法:

  • 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
    ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,10}$
  • 强密码(必须包含大小写字母和数字的组合,可以使用特殊字符,长度在8-10之间)
    ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

其他比较有用的正则表达式

  • 钱的输入格式:
    有四种钱的标识形式我们可以接受:“10000.00”, “10,000.00”, “10000”, “10,000”
    ^([0-9]+)(\.[0-9]{1,2})?$
  • 中文字符
    [\u4e00-\u9fa5]
  • 空白行
    \n\s*\r
  • HTML标记
    <(\S*?)[^>]*>.*?<.*?/>
  • IP地址
    ((25[0-5]|2[0-4]\d|[1]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[1]?\d?\d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值