使用regexp拆分类似'foo = bar#baz = qo \#ox#al\= pha = beta的字符串

Kon*_*ads 2 regex

这是一个快速的挑战.取这个字符串foo=bar#baz=qo\#ox#al\=pha=beta,其中包含由#彼此分隔的键值对[pair]和=作为键和值之间的分隔符,并使用正则表达式(perl,python,classic等)将其拆分为其组件.如果在键或值中遇到字符#和=,则它们以\为前缀.因此,结果应该是键/值表:

KEY    | VALUE
foo    |  bar
baz    | qo#ox
al=pha | beta
Run Code Online (Sandbox Code Playgroud)

如果你的正则表达式(分裂或匹配)只是将它分成#字符,你得到100分.如果你设法分成一个转到键和值= =字符,则收集额外的50分.

PS使用令牌解析和前瞻或后面解决这个问题是微不足道的,所以没有点.

LHM*_*ies 6

#!/usr/bin/perl

use v5.10;
use strict;
use warnings;

my $input = 'foo=bar#baz=qo\#ox#al\=pha=beta';
my %table = $input =~ m'((?:\\.|[^\\=])+)=((?:\\.|[^\\#])+)#?'g;

for my $key (sort keys %table) { say "$key\t| $table{$key}" }
Run Code Online (Sandbox Code Playgroud)

(编辑:在regexp上使用单引号,主要是为了防止StackOverflow认为#是注释字符).