我阅读了有关在Perl 5中使用多行正则表达式的手册,但仍然无法弄清楚为什么以下那些不能按预期工作:
#!/usr/bin/perl
use v5.20;
my $s = <<'ENDSTR';
aaa : AAA
bbb : BBB
ccc : CCC
ENDSTR
my $m = 'bbb';
my $a = $s =~ s/.*^$m *: (.*?)$.*/$1/rsm;
my $b = $s =~ s/[.\n]*?^$m *: (.*)$[.\n]*/$1/rm;
print "a: $a\n";
print "b: $b\n";
该计划的预期输出是
a: BBB
b: BBB
但是这些正则表达产生了:
a: BBB
ccc : CCC
b: aaa : AAA
bbb : BBB
ccc : CCC
如何纠正这些正则表达式以获得所需的匹配?
答案 0 :(得分:1)
在perlmonks.org上,我被告知正确的变体:
var x = (e.clientX - 60) + 'px',
y = (e.clientY - 40) + 'px'; // Here the 60 should be something to center the tooltip instead
答案 1 :(得分:0)
使用s标志你允许。用于匹配行结尾的元字符。删除它或将正则表达式末尾的。*更改为。*?
答案 2 :(得分:0)
我认为通过\s*:\s*
和\n
拆分该字符串可能更容易。您可以使用输出很容易地构建哈希,但是如果您的一个字符串中有:
,而正则表达式中有#!/usr/bin/perl
use v5.20;
my $s = <<'ENDSTR';
aaa : AAA
bbb : BBB
ccc : CCC
ENDSTR
my %hash = split(/(\s*:?\s*|\n)/, $s);
say $hash{'bbb'};
,则此方法将无效。以下代码适用于我:
Config::General
如果您尝试以该格式解析数据,则应尝试使用$ openssl enc -aes-256-cbc -salt -in file.txt -out file.txt.enc
can parse a simple configuration file format,它与您拥有的http://www.shellhacks.com/en/Encrypt-And-Decrypt-Files-With-A-Password-Using-OpenSSL非常相似,但也支持评论,块和其他很酷的东西