ht-6ren">
gpt4 book ai didi

regex - 将字符串解析为哈希

转载 作者:行者123 更新时间:2023-12-04 22:31:13 25 4
gpt4 key购买 nike

我有一个字符串:

<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。

最佳答案

您可以在 ","上对字符串进行 split,然后使用 map 创建哈希:

#!/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;

得到相同的结果。

关于regex - 将字符串解析为哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com