regex - 如何在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*$
我究竟做错了什么?
解决方案
打开 /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-----
$
推荐阅读
- c# - 如何一次性在内存集合中与其后备数据库表同步
- swift - 关于这段代码的问题对字典来说是非常熟悉的。这种代码叫什么?
- python - 使用 Selenium 选择一个 ClassName,其中有多个具有相同名称的 ClassName
- python - 从带有 URL 的网站下载图像并按描述排序
- visual-studio-code - html中的自动完成css类在vs代码中不起作用
- python-3.x - Python3套接字settimeout()在套接字启动期间不稳定
- javascript - 未捕获(承诺)类型错误:无法读取未定义的属性“socialMediaOption”
- electron - 将菜单和标题放在同一行(电子)
- cplex - 序列化 Cplex Concert 对象
- python - 错误- IndentationError: unindent 不匹配任何外部缩进级别