java中正则的使⽤与懒惰匹配和贪婪匹配
java中正则表达式的使⽤与懒惰匹配和贪婪匹配
java正则表达式基础
正则表达式⽤来匹配特定字符串,对于需要替换掉特定字符中的特定字符串如html标签,需要注意正则表达式的懒惰匹配和贪婪匹配,懒惰匹配匹配第⼀个不影响后续匹配,贪婪匹配配匹所有符合的结果。
基本⽤法
中括号[]
⽤来匹配中括号的单个字符,如a[hjkl]c可匹配 ahc,ajc,akc,alc,注意只匹配单个字符,不可匹配ahjc等。
英⽂点符号 '.'
⽤来匹配任意单个字符,如a.b,可匹配a1b,a#b等单个字符。
或符号 |
相当于或,a[b|cd|e]f ,可匹配 abf,acdf,aef.
匹配次数
*: 匹配任意次数。
:匹配0次或1次
+:匹配1次或多从
{n}:匹配n次
{n,m}:匹配n到m次
懒惰匹配与贪婪匹配
懒惰匹配在代码中⾮常常⽤,向需要匹配替换掉json串中的某个属性时,我们就要使⽤*?来避免贪婪匹配。其主要区别在于贪婪匹配会匹配所有符合条件的,懒惰匹配只匹配⼀次。下⾯使⽤代码来说明
1.⾸先看错误⽰例。
public class Main {
public static void main(String[] args) {
String jsonstr = "[{\"nodename\":\"任意名称\",\"nodedesc\",\"节点描述\"}]";
String regex = "\"nodename\":\".*\",";
System.out.placeAll(regex,""));
}
}
结果输出为:[{"节点描述"}]
这次匹配的结果是我们意料之外的,我们只想去掉nodename这⼀个属性,但是却连nodedesc:也匹配掉了,这就是贪婪匹配,匹配最⼤次满⾜的字符。
2.正确是咧
public class Main {
public static void main(String[] args) {
String jsonstr = "[{\"nodename\":\"任意名称\",\"nodedesc\",\"节点描述\"}]";
String regex = "\"nodename\":\".*?\",";
System.out.placeAll(regex,""));
}
}时间正则表达式java
结果输出为:[{"nodedesc","节点描述"}]
可以看到这样匹配是正确的,使⽤.来匹配任意字符*?来懒惰匹配只匹配⼀次。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。