您的位置:首页 > 其它

正则表达式应用实例

2013-06-27 23:04 525 查看

零宽断言

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)的字符”。

待补充……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: