Java正则多字符串匹配替换
Java中使⽤也⽐较简单:
1. 编译正则表达式的字⾯值得到对应的模式Pattern对象;
2. 创建匹配给定输⼊与此模式的匹配器Matcher;
3. 通过匹配器对象执⾏操作,匹配器对象的⽅法很丰富,⽅法之间组合使⽤更加强⼤。
复制代码代码如下:
public static void main(String[] args) {
//被替换关键字的的数据源
Map<String,String> tokens = new HashMap<String,String>();
tokens.put("cat", "Garfield");
tokens.put("beverage", "coffee");
/
/匹配类似velocity规则的字符串
String template = "${cat} really needs some ${beverage}.";
//⽣成匹配模式的正则表达式
String patternString = "\\$\\{(" + StringUtils.join(tokens.keySet(), "|") + ")\\}";
Pattern pattern = Patternpile(patternString);
Matcher matcher = pattern.matcher(template);
//两个⽅法:appendReplacement, appendTail
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, (up(1)));
}
matcher.appendTail(sb);
//out: Garfield really needs some coffee.
System.out.String());
//对于特殊含义字符"\","$",使⽤Matcher.quoteReplacement消除特殊意义
//out: cat really needs some beverage.
System.out.placeAll("$1"));
//out: $1 really needs some $1.
System.out.placeAll(Matcher.quoteReplacement("$1")));
//到得邮箱的前缀名。插⼀句,其实验证邮箱的正则多种多样,根据⾃⼰的需求写对应的正则才是王道    String emailPattern = "^([a-z0-9_\\.\\-\\+]+)@([\\da-z\\.\\-]+)\\.([a-z\\.]{2,6})$";
pattern = Patternpile(emailPattern);
matcher = pattern.matcher("test@qq");
//验证是否邮箱
System.out.println(matcher.find());
//得到@符号前的邮箱名  out: test
System.out.placeAll("$1"));
//获得匹配值
replaceall()String temp = "<meta-data android:name=\"appid\" android:value=\"joy\"></meta-data>";
pattern = Patternpile("android:(name|value)=\"(.+?)\"");
matcher = pattern.matcher(temp);
while(matcher.find()) {
//out: appid, joy
System.out.up(2));
}
}
⼀些⽼是忘基础
[...] 位于括号之内的任意字符
[^...] 不在括号之中的任意字符
. 除了换⾏符之外的任意字符,等价于[^\n]
\w 任何单字字符, 等价于[a-zA-Z0-9]
\W 任何⾮单字字符,等价于[^a-zA-Z0-9]
\s 任何空⽩符,等价于[\ t \ n \ r \ f \ v]
\S 任何⾮空⽩符,等价于[^\ t \ n \ r \ f \ v]
\d 任何数字,等价于[0-9]
\D 除了数字之外的任何字符,等价于[^0-9]
[\b] ⼀个退格直接量(特例)
{n, m} 匹配前⼀项⾄少n次,但是不能超过m次
{n, } 匹配前⼀项n次,或者多次
{n} 匹配前⼀项恰好n次
匹配前⼀项0次或1次,也就是说前⼀项是可选的. 等价于 {0, 1}
+ 匹配前⼀项1次或多次,等价于{1,}
* 匹配前⼀项0次或多次.等价于{0,}
| 选择.匹配的要么是该符号左边的⼦表达式,要么它右边的⼦表达式
(...) 分组.将⼏个项⽬分为⼀个单元.这个单元可由 *、+、?和|等符号使⽤,⽽且还可以记住和这个组匹配的字符以供此后引⽤使⽤
\n 和第n个分组所匹配的字符相匹配.分组是括号中的⼦表达式(可能是嵌套的).分组号是从左到右计数的左括号数
^ 匹配的是字符的开头,在多⾏检索中,匹配的是⼀⾏的开头
$ 匹配的是字符的结尾,在多⾏检索中,匹配的是⼀⾏的结尾
\b 匹配的是⼀个词语的边界.简⽽⾔之就是位于字符\w 和 \w之间的位置(注意:[\b]匹配的是退格符)
\B 匹配的是⾮词语的边界的字符
题外话
邮箱验证,以前验证邮箱,⽹上搜个正则装在⾃⼰程序⾥⾯就⽤,其实这是不对的,不同的公司对邮箱的验证格式是不⼀样的,⽐⽅说163和qq邮箱注册,他们要求的格式都不⼀样,所以搜⼀个正则表达式就去套所有的邮箱格式也是不对的,符合⾃⼰的需求的正则才是正确的。

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