如何在perl中匹配以----- BEGIN PRIVATE KEY -----开头的密钥?

时间:2019-01-25 07:42:54

标签: regex perl

我正在尝试使用以下格式的Perl语言的键进行匹配。

Format => 'Password key1 key2'

key1   =>  Alphanumeric text (ABCD1234)

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

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

我尝试匹配关键字'Password'然后匹配key1,但是我不能匹配以连字符开头的key2。

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

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

打开/ 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-----
$