加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 将字符串解析为哈希

发布时间:2020-12-14 06:04:54 所属栏目:百科 来源:网络整理
导读:我有一个字符串: https://gitlab.me.com/api/v3/projects/all?page=2per_page=5;rel="next",https://gitlab.me.com/api/v3/projects/all?page=1per_page=5;rel="first",https://gitlab.me.com/api/v3/projects/all?page=8per_page=5;rel="last" 所以格式是
我有一个字符串:

<https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5>;
rel="next",<https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5>;
rel="first",<https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5>;
rel="last"

所以格式是

(<val>; rel="key")*

我想用以下格式将其解析为哈希:

next => https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5
first => https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5
last => https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5

在Java中,我将使用正则表达式模式来提取每个键=>价值对并将它们放入地图中.模式将是这样的:

<([^>]++)>;s*rel="([^"]++)"

哪个会给我第二个匹配组中的键和第一个匹配组中的值.同样的方法是实现这一目标的最好方法是Perl,还是我能做些什么?

附:我使用Perl而不是Java的原因是服务器没有Java.

解决方法

您可以在“,”上拆分字符串,然后使用映射创建哈希:

#!/usr/bin/env perl

use strict;
use warnings;

my $str = 'https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5; rel="next",https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5; rel="first",https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5; rel="last"';

my %hash = map { 
    my ($v,$k) = $_ =~ /s*([^;]+);s*rel="([^"]+)".*/; 
    $k => $v;
} split ',',$str;

foreach my $key (keys %hash) {
    print "$key => $hash{$key}n"
}

输出:

first => https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5
next => https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5
last => https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5

更新

使用新字符串,您可以:

$str = q(<https://gitlab.me.com/api/v3/projects/all?page=2&per_page=5>; rel="next",<https://gitlab.me.com/api/v3/projects/all?page=1&per_page=5>; rel="first",<https://gitlab.me.com/api/v3/projects/all?page=8&per_page=5>; rel="last");

my %hash = map { 
    my ($v,$k) = $_ =~ /<([^>]+)>;s*rel="([^"]+)".*/; 
    $k => $v;
} split ',$str;

得到相同的结果.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读