1.正则表达式java
正则表达式就是使用一系列预约义的特殊字符来描述一个字符串的格式规则,而后使用该格式规则匹配某个字符串是否符合格式要求。正则表达式
1)"."和"\"ide
"."点儿,在正则表达式中表示任意一个字符。 spa
"\"在正则表达式中是转意字符,当咱们须要描述一个已经被正则表达式使用的特殊字符时,咱们就能够经过使用"\"将其转变为本来的意思。 orm
"\"在正则表达式中也有一些预约义的特殊内容: blog
\d:表示任意一个数字 ip
\w:表示任意一个单词字符(只能是 数字,字母,下划线)ci
\s:表示任意一个空白字符(\t \r \n \f \x0B)字符串
\D:表示任意一个非数字字符get
\W:表示任意一个非单词字符
\S:表示任意一个非空白字符
2)"字符集合 [ ]"
"[ ]"用来描述单一字符,方括号内部能够定义这个字符的内容,也能够描述一个范围。例如:
[abc]:表示该字符只能是a或者b或者c
[123]:表示该字符只能是1或者2或者3
当咱们须要描述全部小写字母时,咱们可使用范围 [a-z],表示该字符能够是任意一个小写字母。
一样还可使用 [0-9] 来表示该字符能够是任意一个数字。
也能够在多个范围内选择。好比,[a-zA-Z0-9_] 表示该字符能够是任意字母,数字以及"下划线"。
3)"*"、"+"、"?"
一般咱们须要描述的字符串会有不少重复出现的元素,但又不须要严格限制出现的次数时,咱们就可使用"*","+"这些量词。
例如:邮箱地址,那么在"@"字符前容许出现若干字符做为用户名。这时候咱们就可使用"\w+"来描述这里至少出现一个单词字符了。
"+":表示内容能够连续出现至少1次以上
"*":表示内容出现0-若干次
"?":表示内容出现0-1次
4){n}、{n,}{n,m}
除了前面讲到的量词外,有时咱们也须要要求内容出现的次数有具体要求。好比手机号码。这时咱们要求出现的数字就不能是一个模糊的概念了,而必需要求11位。又好比咱们要求用户输入密码时,要求密码是6-15位。遇到这类问题是,咱们可使用:
{n}:表示内容必须出现n次
{n,m}:表示内容出现n-m次
{n,}:表示内容出现至少n次
例如,\d{11} 就表示数字只能出现11位,这样就解决了上述的问题。
5)分组
在描述电话号码时,前面有区号,区号的形式能够是0086或者+86,那么咱们如何在这两个字符串之间选择?这时咱们可使用分组"()"。
() 能够将内容看作一个总体,()中可使用"|"来表示或关系。例如,(+86|0086) 表示这里能够是+86或者0086。
6)"^"和"$"
经过在正则表达式的开始添加"^"以及末尾添加"$"来表示一个总体。若不使用它们,那么正则表达式只匹配某个字符串的部份内容是否符合格式规则,但使用它们,则要求字符串必须从头至尾都知足该格式规则。
例如,^\w{ 8,10 }$ 表示总体字符串只能出现单词字符8-10个。
7)使用正则表达式须要注意:
① 邮箱格式的正则表达式 @无特殊含义,可直接写,也可[@]
② 使用Java字符串去描述正则表达式的时候,会出现一个冲突,即如何正确描述正则表达式的“.”。
原由:
在正则表达式中咱们想描述一个“.”,但“.”在正则表达式中有特殊含义,他表明任意字符,因此咱们在正则表达式中想描述“.”的愿义就要写成“\.”可是咱们用java字符串去描述正则表达式的时候,由于“.”在java字符串中没有特殊意义,因此java认为咱们书写String s="\.";是有语法错误的,由于“.”不须要转义,这就产生了冲突。
处理:咱们实际的目的很简单,就是要让java的字符串描述"\."又由于在java中"\"是有特殊含义的,表明转义字符咱们只须要将"\"转义为单纯的斜杠,便可描述"\."了因此咱们用java描述“\.”的正确写法是String s="\\.";
③ 若正则表达式不书写^或$,正则表达式表明匹配部份内容,都加上则表示权匹配。
案例4: