regex - 具有特殊字符的企业社会责任主题摘录

标签 regex perl openssl csr

我需要提取 $subj ,如下面的代码片段所示,但看起来我的正则表达式没有按预期工作。这实际上与此类似:How to string manipulate/extract subject contents in a CSR using OpenSSL command + Perl?但在 CSR 中具有不同的主题条目。我不确定我在正则表达式中是否为 %subjinfo 做了一件好事

#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;

my $subj =
    'subject=/O=test~@#$^()_+-=\{}|;':",./<>/OU=test~@#$^()_+-=\{}|;':",./<>/emailAd‌​dress=test~@#$^()_+-=\{}|;':",./<>/L=CDE/ST=ABC/C=AU/CN=test~@#$^()_+ -=\{}|;':",./<>';

my %subjinfo = ( $subj =~ m,(\w+)=([^=]*)(?:/|$),g );
print Dumper \%subjinfo;

所以必须给出一个结果:

$VAR1 = {
          'subject' => '',
          'L' => 'NYC',
          'C' => 'AMER',
          'OU' => 'test~@#$^()_+-=\{}|;':",./<>',
          'emailAddress' => 'test~@#$^()_+-=\{}|;':",./<>',
          'ST' => 'AMER',
          'CN' => 'test~@#$^()_+-=\{}|;':",./<>',
          'O' => 'test~@#$^()_+-=\{}|;':",./<>'
        };

这可能吗?你能给建议吗?

最佳答案

在正则表达式上拆分看起来比仅使用正则表达式的解决方案更自然,

use Data::Dumper;

my $subj = q(subject=/O=test~@#$^()_+-=\{}|;':",./<>/OU=test~@#$^()_+-=\{}|;':",./<>/emailAddress=test~@#$^()_+-=\{}|;':",./<>/L=CDE/ST=ABC/C=AU/CN=test~@#$^()_+ -=\{}|;':",./<>);

(undef, my %subjinfo) = split m|/?(\w+)=|, $subj;

print Dumper \%subjinfo;

输出

$VAR1 = {
      'emailAddress' => 'test~@#$^()_+-=\\{}|;\':",./<>',
      'CN' => 'test~@#$^()_+ -=\\{}|;\':",./<>',
      'OU' => 'test~@#$^()_+-=\\{}|;\':",./<>',
      'L' => 'CDE',
      'C' => 'AU',
      'ST' => 'ABC',
      'subject' => '',
      'O' => 'test~@#$^()_+-=\\{}|;\':",./<>'
    };

关于regex - 具有特殊字符的企业社会责任主题摘录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31283059/

相关文章:

java - 这个java正则表达式有什么问题?

java - 从通配符到正则表达式

php - 如何通过文本搜索实现基于 Web 的查找文件数据库

perl - 使用函数从对象或哈希中检索值

c - d2i_RSA_PUBKEY、d2i_RSAPrivateKey 和 d2i_RSAPublicKey 返回 NULL

c - AES CTR对称加解密

tomcat - 如何在tomcat上做双向认证?

regex - 漂亮的字符串操作

python - Python 中的正则表达式不会匹配字符串的结尾

linux - 如何从适用于其子项的 Perl 脚本中设置 ulimit?