首页 > 解决方案 > 如何在perl中匹配以-----BEGIN PRIVATE KEY-----开头的键?

问题描述

我正在尝试以 Perl 语言匹配以下格式的密钥。

Format => 'Password key1 key2'

key1   =>  Alphanumeric text (ABCD1234)

key2 => -----BEGIN PRIVATE KEY-----ABCDEFG\nasdafasfas\n\safaf\n-----END PRIVATE KEY-----

我无法将此格式与我的正则表达式匹配。

我尝试匹配关键字“密码”然后匹配 key1,但我无法匹配以连字符开头的 key2。

^\s*Password\s+(\S+)\s+(-----BEGIN PRIVATE KEY-----(\S+)-----END PRIVATE KEY-----)\s*$

我究竟做错了什么?

标签: regexperl

解决方案


打开 /m 和 /s 开关。当 /m 打开时, $ 将在换行符处匹配,并且由于您在 key2 中有“\n”,使用 $ 将失败匹配。您可以仅使用 (.+) 匹配字符串的结尾或使用 \Z 锚定它。

看一下这个:

$ export a="Password ABCD1234 -----BEGIN PRIVATE KEY-----ABCDEFG\nasdafasfas\n\safaf\n-----END PRIVATE KEY-----"
$ echo $a | perl -0777 -ne ' /^\s*Password\s+(\S+)\s+(-+BEGIN.+)/ms and print "key1=$1\nkey2=$2" '
key1=ABCD1234
key2=-----BEGIN PRIVATE KEY-----ABCDEFG
asdafasfas
\safaf
-----END PRIVATE KEY-----
$ echo $a | perl -0777 -ne ' /^\s*Password\s+(\S+)\s+(-+BEGIN.+)\Z/ms and print "key1=$1\nkey2=$2" '
key1=ABCD1234
key2=-----BEGIN PRIVATE KEY-----ABCDEFG
asdafasfas
\safaf
-----END PRIVATE KEY-----
$

推荐阅读