Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式如何匹配a/b/c。。。?_Regex_Perl_Hash - Fatal编程技术网

Regex 正则表达式如何匹配a/b/c。。。?

Regex 正则表达式如何匹配a/b/c。。。?,regex,perl,hash,Regex,Perl,Hash,如果我有一个像下面这样的数组,其中元素的顺序是随机的,每个元素可以有多少个级别没有限制。这里只显示3个级别a、b和c 我希望能够解析这样的数组,并在只有3个级别的情况下,将结果存储在哈希的散列中 $VAR1 = { 'a' => { 'b' => 'c' } }; 问题 我的问题是如何为此编写正则表达式,因为第一级末尾没有一个/,而且由于元素的顺序是随机的,如果a/b/c已经

如果我有一个像下面这样的数组,其中元素的顺序是随机的,每个元素可以有多少个级别没有限制。这里只显示3个级别<代码>a、
b
c

我希望能够解析这样的数组,并在只有3个级别的情况下,将结果存储在哈希的散列中

$VAR1 = {
          'a' => {
                   'b' => 'c'
                 }
        };
问题

我的问题是如何为此编写正则表达式,因为第一级末尾没有一个
/
,而且由于元素的顺序是随机的,如果
a/b/c
已经插入到散列中,那么元素
a
不应该删除键
a
的散列值

那么如何解决这样的问题呢

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;

my @ar = ("a", "a/b", "a/b/c");
my %h = ();

foreach my $a (@ar) {
}
例如:

my @ar = ("a", "a/b", "a/b/c");
my %h;

for (@ar) {
    my $levels = split /\//;

    for (my $i = 0; $i <= $#levels; $i++) {
        # How ever you want to set-up your hash of hashes
        # But each for loop iteration would give you a "level" of input
    }
}
my@ar=(“a”、“a/b”、“a/b/c”);
我的%h;
for(@ar){
我的$levels=split/\/;
对于(my$i=0;$i示例:

my @ar = ("a", "a/b", "a/b/c");
my %h;

for (@ar) {
    my $levels = split /\//;

    for (my $i = 0; $i <= $#levels; $i++) {
        # How ever you want to set-up your hash of hashes
        # But each for loop iteration would give you a "level" of input
    }
}
my@ar=(“a”、“a/b”、“a/b/c”);
我的%h;
for(@ar){
我的$levels=split/\/;
对于(我的$i=0;$i
通常,您会分配或修改由DiveRef返回的标量引用(或分配给DiveVal的结果),但这里您只想确保键存在

\(…)
将通过split返回的列表转换为标量引用列表,这会告诉Data::Diver这些总是散列键,如果是数值的,则不可能是数组索引

通常,您会分配或修改由DiveRef返回的标量引用(或分配给DiveVal的结果),但这里您只想确保键存在

\(…)
将通过split返回的列表转换为标量引用列表,这会告诉Data::Diver这些总是散列键,如果它们是数字的,则不可能是数组索引。

获取

"a"                 => $tree = "a";
"a", "a/b"          => $tree = { "a" => "b" };
"a", "a/b", "a/b/c" => $tree = { "a" => { "b" => "c" } };
"a", "a/b", "a/c"   => $tree = { "a" => { "b" => undef, "c" => undef } };
代码:


但这不是一个好的数据结构,因为您需要使用
ref
来导航它

"a"                 => $tree = { "a" => undef };
"a", "a/b"          => $tree = { "a" => { "b" => undef } };
"a", "a/b", "a/b/c" => $tree = { "a" => { "b" => { "c" => undef } } };
"a", "a/b", "a/c"   => $tree = { "a" => { "b" => undef, "c" => undef } };
代码:

看看构建这个数据结构有多简单?当您尝试导航它时,您将获得类似的好处


注意,您可以使用创建第二个数据结构(尽管我记得它要慢得多)

得到

代码:


但这不是一个好的数据结构,因为您需要使用
ref
来导航它

"a"                 => $tree = { "a" => undef };
"a", "a/b"          => $tree = { "a" => { "b" => undef } };
"a", "a/b", "a/b/c" => $tree = { "a" => { "b" => { "c" => undef } } };
"a", "a/b", "a/c"   => $tree = { "a" => { "b" => undef, "c" => undef } };
代码:

看看构建这个数据结构有多简单?当您尝试导航它时,您将获得类似的好处


注意,您可以使用创建第二个数据结构(尽管我记得它要慢得多)


“a”将如何处理
是否要处理输入?在这种情况下,值应该是什么并不明显,哈希不能只有一个键。如果这是您试图解析的路径,请改用
文件::Spec
模块
拆分目录
。出于好奇,字符串实际上代表什么?根据正如TLP为文件路径指出的,它们是。但是如果值在a案例中应该是未定义的,那么它也应该在c案例中(
{'a'=>{'b'=>{'c'=>undef}}}
),那么
“a”将如何
是否要处理输入?在这种情况下,值应该是什么并不明显,哈希不能只有一个键。如果这是您试图解析的路径,请改用
文件::Spec
模块
拆分目录
。出于好奇,字符串实际上代表什么?根据正如TLP为文件路径指出的,它们是。但是如果值在a案例中应该是未定义的,那么它也应该在c案例中(
{'a'=>{'b'=>{'c'=>未定义}}
my $tree;
for ("a", "a/b", "a/b/c") {
   my $p = \$tree;
   $p = \( ($$p)->{$_} ) for split qr{/};
}
use Data::Diver qw( DiveRef );

my $tree;
for ("a", "a/b", "a/b/c") {
   DiveRef($tree //= {}, \split(qr{/}));
}