这是一个快速的挑战.取这个字符串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使用令牌解析和前瞻或后面解决这个问题是微不足道的,所以没有点.
#!/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认为#是注释字符).