zoukankan      html  css  js  c++  java
  • 正则表达式应用实例

    零宽断言

    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				</li>	<li>

     java中用下面的正则表达式可以处理:

    (?<=<b>车牌号码:</b>)\S+(?=\s)

     同样用的是零宽断言,不过需要注意的是,这里用\S+来匹配任意非空白字符,包括汉字。我刚开始想到的是用.来匹配:

    (?<=<b>车牌号码:</b>).+(?=\s)

     得到的确实类似下面的结果:

    京NC4Y59                </li>

     这里“.”可以这样理解:“后面所有跟着空白字符(\s)的字符”。

    待补充……

  • 相关阅读:
    2016多校赛1 A 期望 B SG博弈,状压 D 倍增,二分
    POWOJ 1739: 魔术球问题 DAG最小路径覆盖转最大流
    Codeforces 743D 树形dp
    线性规划与网络流24题 索引
    WangEditor富文本编辑器的简单使用,并将文本数据发往后台
    SSRF
    关于Blind XXE
    blind xxe攻击
    linux awk命令详解
    kali
  • 原文地址:https://www.cnblogs.com/zhanjindong/p/3159990.html
Copyright © 2011-2022 走看看