正则表达式(一)-正则表达式的特点

正则表达式:
  • 符合一定规则的表达式
  • 特点:用一些特定地符号,来表示一些代码操作.如,用 a* 代表abcdse 这个字符串.
  • 所以学习正则表达式,就是在学习一些特殊符号的使用
  • 作用:用于专门操作字符串
    • string类型提供的字符串的操作,太简单.有时候不能满足字符串操作的需求.而如果使用代码实现字符串的操作,实现的代码又会太长.这时候正则表达式就营运而生了
    • 对字符串即简便又灵活高效的方式就是正则表达式

例子
对OO号码进行校验.
要求:QQ号只有5~15位;0不能打头;只能是数字
设计过程,从第1个字符开始设计 
  • 对这个QQ号的一位一位地进行分析
  • 首先,第1位,不能0开头,只能取1-9     regex="[1-9]"
  • 说第1位满足了,那第2位呢?只要是一个数字就可以了,所以用\\d,代表第2位
  • 第3位呢,第3为也是\\d,看是不是要崩溃啊.我QQ号的位数不是定值啊,那我\\d应该写几个呢.我不知道啊!
    • 所以,你知道了第3位之后都是\\d  那使用"[1-9]\\d{4,14}" 

正则表达式的具体操作功能
  • 进行字符串的匹配.
    • 使用string 
  • 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
正则表达式的介绍
字符类模式匹配
[abc]ab, or c (simple class)
[^abc]Any character except ab, or c (negation)
[a-zA-Z]a through z or A through Z, inclusive (range)
[a-d[m-p]]a through d, or m through p[a-dm-p] (union)
[a-z&&[def]]de, or f (intersection)
[a-z&&[^bc]]a through z, except for b and c[ad-z] (subtraction)
[a-z&&[^m-p]]a through z, and not m through p[a-lq-z](subtraction)

[abc]  
  • []是一个特殊的符号,表示"或"的意思. 字符串第第一个字符是a或b或c,并且匹配的字符串有且仅有1个字符,即字符串要么是 a 要么是 b 要么是 c 才能把这个字符串匹配成功
  • [abc][a-z]    你的第一个字母必须是a或b或c,你的第二个字母只要是a~z就可以了.匹配的字符串的长度为2

[^abc] 
  • 异或a,b,c
  • 第一个字母只要不是a,b,c就可以了.匹配的字符串的长度为1
  • [^abc][d-f]  你的第一个字母只要不是a,且不是b,且不是c,第2个字母是d-f的字符,这个字符串就可以匹配成功.匹配的字符串的长度是2

[a-zA-Z]
  • [^abc][a-zA-Z] 匹配的字符串的第1位即不是a,又不是b,也不是c,第2位只要字符是a~z或A~Z中的一个就可以了.匹配的字符串长度为2

[a-d[m-p]]
  • 对应位置的字符或者是a-d范围的一个字符.或者是m-p范围的一个字符

[a-z&&[def]]
  • 取[a-z]于[def] 的交集.则对应位置是d 或者 e 或者 f

[a-z&&[^bc]]

[a-z&&[^m-p]]


我现在要求:第1个数是1位是字母,第2位是数字
  • [a-zA~Z][0-9]   这个字符串当且仅当只有2位.第1为是字符,第2为是一个数字;
    • 我这个正则表达式只能校验长度为2的字符串
预定义字符类
.Any character (may or may not match line terminators)
\dA digit: [0-9]
\DA non-digit: [^0-9]
\hA horizontal whitespace character: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\HA non-horizontal whitespace character: [^\h]
\sA whitespace character: [ \t\n\x0B\f\r]
\SA non-whitespace character: [^\s]
\vA vertical whitespace character: [\n\x0B\f\r\x85\u2028\u2029]
\VA non-vertical whitespace character: [^\v]
\wA word character: [a-zA-Z_0-9]
\W
A non-word character:  [^\w]


  • 小数点.表示任意的一个字符
\d
  • 表示任意的一个0~9的数字
  • [a-zA-Z]\\d 等价于[a-zA-Z][0-9]
    • \\d 的意思是我先用\把"\d"中的"\"转义成一个普通的反斜杠,再和d组合在一起,成代表0-9的1个数字
    • 正则表达式中,反斜杠要出现,就一对一对地("\\")地出现
\D
  • 非0~9
  • 即,除了0~9的数,这个.都可以表示

\s
  • 代表1个"空白字符".
  • 空白字符有:空格,16进制,换页符,回车符
  • 它表示 
    •  \t\n     空格
    • \xOB   代表16进制
    • \f     换页符
    • \n    回车符

\S
  • 代表1个非空白符
  • [a-z]\\S
    • ab 匹配成功
    • "a "  a加上1个空格   匹配失败
\w
  • [a-zA-Z_0-9] 
  • 代表1个a-z,A-Z.0-9 中的任意的一个符号.既可以表示小写字母,又可以表示大写字母,还可以表示数字
  • "\\w"   匹配 字符串"a" 成功."9" 成功 "Z" 成功

数量词
  • 上面的让我一个[]代表1个字符,太麻烦了吧.于是,数字就出现了
Greedy quantifiers
X?X, once or not at all
X*X, zero or more times
X+X, one or more times
X{n}X, exactly n times
X{n,}X, at least n times
X{n,m}X, at least n but not more than m times

X ?
  • X代表一个匹配规则
  • 这个?就代表,这个规则X,出现了1次或者1次也没有
  • [a-zA-Z]\\d? 
    • 我的第1个字符是一个字母,第2个字符是一个数字,在\\d 后面添加了一个"?" ,表示我的\\d有可能有,有可能没有.即我的字符串中第2位以后可能有一个数字,也有可能没有
    • 如 "a7","a"  都可以匹配成功  

X *
  • *后面的所有的匹配规则都是X,一旦出现别的类型的匹配规则,就会出现错误.
  • 代表这个匹配规则X可能出现0次或者多次(1,2,3,4...n)
    • 0次是啥意思啊 .    * 就是X*的0次的意思
    • "[a-z]\\d*"    
      • 字符串 "a"  匹配成功
  • X,号后边的匹配规则必须是和X这个规则同一个类型的.
    • 例如 [a-z]\\d*  表示字符串的第1位是字母a-z,第2位是数字,第3位及其以后都必须是数字才可以
      • "a2a4"  这个字符串就匹配失败了  .因为第3位是一个字母
  • 但是你要记住啊出现多次X的规则,必须是连续出现的.XXXXX

X +
  • +后面必须得有不少于1个X匹配规则
  • +后面的所有的规则都是X
  • 如"a+" 
    • "aab"   匹配失败 .因为第1个字符a后面,不是所有的字符都是a,第3位是b
    • "aaa" 匹配成功

X { n }
  • X规则出现n次
  • [a-z]\\d{3}
    • "a111"  匹配成功
    • "a1111" 匹配不成功
  • [a-z]\\d{3}[a-z]
    • 匹配的字符串长度为1+3+1=5
    • "a111a"  匹配成功

X{n,}
  • 至少取n次
  • [a-z]\\d{3,}
    • "a11"  匹配不成功
    • "a111"  匹配成功
    • "a1111"  匹配成功
    • "a1113" 匹配成功.因为"[a-z]\\d{3,}" 要求的字符串的长度就是4,当a111 匹配成功折之后,匹配结果true 就会被返回."a11113"中的3的匹配将不会被执行.程序的运行就会停止 


X{n,m} 
构建正则表达式的一个非常好的方法
int num=3
String str ="[a-zA-Z]"+"{"+num+"}"        // [a-zA-Z]{3}

手机号段匹配
13xxx  15xxx   18xxx
regix="1{358}\\d{9}"
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值