java正则表达式并且条件_Java⾥正则表达式(包括⼀些⾼级
⽤法)
有些内容只有在Java⾥⾯才能使⽤。------原⽂作者:逗号(他不⾼兴发博客)
##字符种类
部分使⽤频率⼏乎为0的这⾥不会提及(⽐如x之流)
###普通
||含义|助记|
|----|-------------------------------------|-----|
|s|⾮空⽩|space|
|s|空⽩||
|d|数字|digit|
|D|⾮数字||
|[]|⾃定义字符种类可使⽤^|&&随意组合||
###特别
||含义|助记|
|-------|------------------------------------------------------------|----------|
|h|横向字符|horizontal|
|h|⾮横向字符||
|v|纵向字符(⽐如说换⾏符)|vertical|
|V|⾮纵向字符||
|w|单词字符(包括-_)|word|
|W|⾮单词字符||
|p{XXX}|POSIX,这个并不常⽤,在有些时候会⽅便,Character有很多is开头的⽅法,将⽅法名中的`is`替换为`Java`可直接使⽤
进⾏字符匹配:p{javaLowerCa}|posix|
|Q|字符转义开始符||
|E|字符转义结束符,这两个符号之间的内容全部按照字⾯量处理,⾥⾯是所有字符都不会有什么含义,⽐如.就是.,s必须匹配s,
⽽不是匹配空⽩。||
##量词
||含义|助记|
|-----|-------------|----|
|?|0个或者1个||
|*|0个或多个||
|+|1个或多个||
|{m}|m个||
|{m,n}|介于m~n个之间||
`?`修饰在量词之后,表尽可能少的匹配!
##边界
###普通
||含义|助记|
|----|------------|----|
|^|字符开始位置||
|$|字符结束位置||
###特别
||含义|助记|
|----|------------------------------|----|
|b|单词边界,单词的最前⾯和最后⾯||
|B|⾮字符串边界||
下⾯的内容普通⼈基本上就已经不管了!
##分组捕获
正则表达式中,每出现⼀对括号就是新建了个新的组。⽐如:`(w+)|(d+)`
正则表达式的组可以⽤使⽤索引进⾏引⽤,形式为:`$index`
`$0`默认指向原来的全部字符
然后索引递增规律如下:
`((a)|(bc))`
`$1`指向`((a)|(bc))`匹配的内容
`$2`指向`(a)`匹配的内容
`$3`指向`(bc)`匹配的内容
然⽽当正则复杂之后,改动将会对索引有较⼤影响,也不⽅便计算索引,此时,你可以为组制定名称:
⽐如匹配字符串:`a=123,b=456`中间的键值,使⽤索引,需要写成:`(w+)=(S+)`,然后使⽤`$1`指向key,使⽤`$2`指向
value。
我们可以将正则改为:`(?w+)=(?S+)`,上述表达式使⽤`?`的形式在正则中为组定义名称。
##引⽤分组
在Java中,你可以在两种地⽅使⽤引⽤:
*正则表达式中
匹配`xxx-xxx`字符`-`两边的内容相同,使⽤索引引⽤前⾯的组(`index`):
```regexp
(w+)-1
```
使⽤名字引⽤前⾯的组:
```regexp
(?w+)-k
```
*在Java的字符串替换中
Markdown中的字符串转为斜线的html:
```java
"*name*".replaceAll("*(?w+)*","$1")
"*name*".replaceAll("*(?w+)*","${content}")
```
##模式
你可以在构造`Pattern`时设定模式:
```Java
e("abc",_INSENSITIVE)
```
模式可以⾃⾏到`Pattern`下查看,这⾥只说使⽤⽅式,在组开头使⽤`?flags:`的⽅式声明模式,⽐如:
匹配单词,不区分⼤⼩写
```regex
(?i:w+)
```
记住`i`(忽略⼤⼩写)、`s`(.匹配全部字符)即可,其他基本不⽤。
##前瞻后顾
前瞻后顾,是正则表达式中的⾼级技巧,主要有5种:
>注意:虽然这货也有括号,但是这货只算个条件,并不会捕获任何内容,也不会影响索引
###前瞻
前瞻中不带`
*`exp1(?=exp2)`
寻找后⾯是exp2的exp1
*`exp1(?!exp2)`
###后顾
*`(?<=exp1)exp2`
匹配exp1后⾯的exp2,前⾯没有exp1的内容将被忽略,⽐如,替换`abcba`替换`c`后⾯的`b`为`xxx`,需要写为:
```java
"abcba".replaceAll("(?<=c)b","xxx")
```
`a`后⾯的`b`则不受影响。
>注意:正则表达式`(?<=c)b`不会匹配字符串`cb`,意思就是:
>
>```java
>asrtFal("cb".matches("(?<=c)b"));
>asrtFal("b".matches("(?<=c)b"));
>asrtTrue("cb".matches("c(?<=c)b"));
>```
*`(?
后顾中带有`
##⽜⼑⼩试
以下所有内容只能使⽤`String#repalceAll`或者`String#matches`完成。
###⼿机号遮罩
将`11`位⼿机号除前4位之外,其他的使⽤`*`替换。
###格式化数字
例如:`1234567890`使⽤正则替换之后,变为`1,234,567,890`。
###Trim字符串
使⽤正则去除字符串开始和结束的空⽩字符。
###去除数字结尾的`0`
`1234.4500`应该处理为`1234.45`,`1234.00`应该处理为`1234`。
###处理⽂档
将字符串的`*测试***测试**`的使⽤单个`*`包围的内容两边分别加上`
`、`
`,不能影响两个`**`包围的内容。
###测试某个字符串是不是合法的Java标识符
###测试`IPv4`
已知`IPv4`中每⼀段的数字需要介于0~255,测试某个字符串是否是合法的`IPv4`表达式。
###去除`//`注释
已知`Java`中可以使⽤`//`进⾏单⾏注释,请去除⼀段代码中的这种注释。
###去除`/*内容*/`注释
已知`Java`中可以使⽤`/**/`进⾏多⾏注释,请去除代码中的这种注释。
本文发布于:2022-12-26 17:21:10,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/35003.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |