正则表达式应用实例
零宽断言
1、有这样的需求,请求一个接口返回下面的xml:
<?xml version="1.0" encoding="UTF-8" ?> <rsp> <code>000000</code> <info>成功</info> </rsp>
现在需要一个简单的处理:如果返回的code为"000000"则在前面加"00"。否则加"10"。利用正则中的(?=exp)和(?<=exp)可以很容易解决:
- (?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp。
- (?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp。
Java中String类的replaceAll方法也可以使用正则表达式。
protected String transferErrorCode2(String response) { String patternStr = "(?<=<code>)\\d+(?=</code>)"; Pattern pattern = Pattern.compile(patternStr); Matcher matcher = pattern.matcher(response); if (matcher.find()) { String match = matcher.group(0); String replace = (match.equals("000000") ? "00" : "10") + match; return response.replaceAll(patternStr, replace); } else { return response; } }
2、解析类似如下html片段中的车牌号:
<b>车牌号码:</b>京NC4Y59\t\t\t\t</li>\t<li>
java中用下面的正则表达式可以处理:
(?<=<b>车牌号码:</b>)\\S+(?=\\s)
同样用的是零宽断言,不过需要注意的是,这里用\\S+来匹配任意非空白字符,包括汉字。我刚开始想到的是用.来匹配:
(?<=<b>车牌号码:</b>).+(?=\\s)
得到的确实类似下面的结果:
京NC4Y59 </li>
这里“.”可以这样理解:“后面所有跟着空白字符(\\s)的字符”。
待补充……
作者:zhanjindong
出处:http://www.cnblogs.com/zhanjindong
个人博客:http://zhanjindong.com
关于:一个程序员而已
说明:目前的技术水平有限,博客定位于学习心得和总结。
出处:http://www.cnblogs.com/zhanjindong
个人博客:http://zhanjindong.com
关于:一个程序员而已
说明:目前的技术水平有限,博客定位于学习心得和总结。