美文网首页
巧用正则匹配解析返回数据

巧用正则匹配解析返回数据

作者: 嘻洋洋 | 来源:发表于2018-12-19 15:31 被阅读0次

1.应用技术

使用java.util.regex包下的Pattern和Matcher两个类

  • Pattern类

    • 创建正则表达式
      用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。
     Pattern p=Pattern.compile("\\w+"); 
    
    • 分隔字符串
      Pattern有一个split()方法,用于分隔字符串,并返回一个String[]。
    Pattern p=Pattern.compile("\\d+"); 
    String[] str=p.split("我的QQ是:456456我的电话是:0532214我的邮箱是:aaa@aaa.com");
    //结果:str[0]="我的QQ是:" str[1]="我的电话是:" str[2]="我的邮箱是:aaa@aaa.com" 
    
    • 用于快速匹配字符串(Pattern的静态方法)
      matches是一个静态方法,用于快速匹配字符串,该方法适合用于只匹配一次,且匹配全部字符串。
    Pattern.matches("\\d+","2223");//返回true 
    Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到 
    Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到 
    
  • Matcher类

    • 创建匹配器
      Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例。
    Pattern p=Pattern.compile("\\d+"); 
    Matcher m=p.matcher("22bb23"); 
    m.pattern();//返回p 也就是返回该Matcher对象是由哪个Pattern对象的创建的 
    
    • Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持(重点),需要将Pattern与Matcher一起合作。
     public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        String str = "Hello,World! in Java.";  
        Pattern pattern = Pattern.compile("W(or)(ld!)");  
        Matcher matcher = pattern.matcher(str);  
        while(matcher.find()){  
         System.out.println("Group 0:"+matcher.group(0));//得到第0组——整个匹配  
         System.out.println("Group 1:"+matcher.group(1));//得到第一组匹配——与(or)匹配的  
         System.out.println("Group 2:"+matcher.group(2));//得到第二组匹配——与(ld!)匹配的,组也就是子表达式  
         System.out.println("Start 0:"+matcher.start(0)+" End 0:"+matcher.end(0));//总匹配的索引  
         System.out.println("Start 1:"+matcher.start(1)+" End 1:"+matcher.end(1));//第一组匹配的索引  
         System.out.println("Start 2:"+matcher.start(2)+" End 2:"+matcher.end(2));//第二组匹配的索引  
         System.out.println(str.substring(matcher.start(0),matcher.end(1)));//从总匹配开始索引到第1组匹配的结束索引之间子串——Wor  
        }  
     }  
    运行结果:
     Group 0:World!  
     Group 1:or  
     Group 2:ld!  
     Start 0:6 End 0:12  
     Start 1:7 End 1:9  
     Start 2:9 End 2:12  
     Wor  
       
    

2.应用场景

  • 返回无规则的数据,需要解析,如需要获取code和uuid的值
//返回数据
window.QRLogin.code = 200; window.QRLogin.uuid = "XXXXXXX"
//解决方法
    Pattern UUID_PATTERN  = Pattern.compile("window.QRLogin.code = (\\d+); window.QRLogin.uuid = \"(\\S+?)\";");
    private String getUUID() {
        String response = getForObject(URL_UUID);
        Matcher matcher = UUID_PATTERN.matcher(response);
        if (matcher.find() && StateCode.SUCCESS.equals(matcher.group(1))) {
            return matcher.group(2);
        }
        return "";
    }
  • 返回xml的数据,需要解析skey,wxsid,pass_ticket等值
<error>
    <ret>0</ret>
    <message>OK</message>
    <skey>xxx</skey>
    <wxsid>xxx</wxsid>
    <wxuin>xxx</wxuin>
    <pass_ticket>xxx</pass_ticket>
    <isgrayscale>1</isgrayscale>
</error>

解决方法:

    public static String match(String reg, String text) {
        Pattern pattern = Pattern.compile(reg);
        Matcher m       = pattern.matcher(text);
        if (m.find()) {
            return m.group(1);
        }
        return null;
    }
        loginSession.setSKey(match("<skey>(\\S+)</skey>", body));
        loginSession.setWxSid(match("<wxsid>(\\S+)</wxsid>", body));
        loginSession.setWxUin(match("<wxuin>(\\S+)</wxuin>", body));
        loginSession.setPassTicket(match("<pass_ticket>(\\S+)</pass_ticket>", body));

相关文章

  • 巧用正则匹配解析返回数据

    1.应用技术 使用java.util.regex包下的Pattern和Matcher两个类 Pattern类创建正...

  • str.extract()

    先介绍str.extract(),可用正则从字符数据中抽取匹配的数据,只返回第一个匹配的数据。注意,正则表达式中必...

  • 正则尝试

    主要收获 首次使用正则匹配爬取。 使用yield返回数据 利用json写入文本

  • 正则表达式

    创建正则表达式 正则.test(字符串) 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假 转义字符 ...

  • 正则表达式

    创建正则表达式 正则.test(字符串) 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假 转义字符 ...

  • 正则表达式的使用

    匹配符合匹配符合正则表达式条件的数据 1.使用test方法判断是否存在 成功返回true,失败返回false 2....

  • 爬虫-解析数据

    数据的解析方式:正则表达式匹配XpathBeautiful Soup 本文主要介绍Beautiful Soup B...

  • 正则表达式

    学习正则的好网站 test方法 判断一个正则能否匹配到内容 match方法 匹配成功返回一个数组,匹配失败返回nu...

  • 正则下

    一、字符串方法(匹配正则)match() 返回匹配字符串的结果,返回为数组内容或nullsearch() ...

  • 正则

    正则的方法test:正则去匹配字符串,如果匹配成功为true,失败返回false 转义字符:\s :空格\S :非...

网友评论

      本文标题:巧用正则匹配解析返回数据

      本文链接:https://www.haomeiwen.com/subject/vtljkqtx.html