Fork me on GitHub

正则表达式应用实例

零宽断言

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

 

待补充……

 

posted @ 2013-06-27 23:04  zhanjindong  阅读(847)  评论(0编辑  收藏  举报
TOP