次の文字列があるとします。
$str = 'Bag Attributes
localKeyID: 28 B5 8E 16 11 88 E9 00 58 D5 76 30 12 B9 59 B8 E4 CE 7C AA
subject=/C=UK/ST=Suffolk/L=Ipswich/O=Example plc/CN=alice
issuer=/C=UK/ST=Suffolk/L=Ipswich/O=Example plc/CN=Certificate Authority/emailAddress=ca@example.com
-----BEGIN CERTIFICATE-----
MIIDDzCCAfegAwIBAgIJAMkyzQVK88NHMA0GCSqGSIb3DQEBBQUAMIGCMQswCQYD
VQQGEwJTRTESMBAGA1UECBMJU3RvY2tob2xtMQ4wDAYDVQQHEwVLaXN0YTEQMA4G
[...]
0fbkqbKulrchGbNgkankZtEVg4PGjo+Y8MdMjtfSZB29hwYvfMX09jzJ68ZqmpYQ
njvcVtLbEZN5OGCkaslb/f2OxLbsUNgIbws538WnaaufDvKmQe2kUdWmpl9Wn9Bf
bZq7B+njvcVa7SsWF/WLq5AUbw==
-----END CERTIFICATE-----';
上記のすべて(および潜在的に含む)を削除したいのです-----BEGIN CERTIFICATE-----
が、これを行う方法を理解することはできません。常になるわけではないことに注意してください-----BEGIN CERTIFICATE-----
。それは--BEGIN CERTIFICATE--
(両側に2つの - がある)またはその-----BEGIN RSA PRIVATE KEY-----
ようなものである可能性があります。
とにかく、ここに私が試したことがあります:
echo preg_replace('#.*?-+[^\r\n]-+#s', '', $str);
-+[^\r\n]-+
上記と一致-----BEGIN CERTIFICATE-----
するので、それまでのすべての文字を .*? と一致させようとしています。しかし、それは機能していません。-----END CERTIFICATE-----
ではなく で止まってい-----BEGIN CERTIFICATE-----
ます。echo preg_replace('#.*?-+[^\r\n]-+#s', '', $str);
前と同じこと。? は、この場合、貪欲さを変更することになっていますが、実際には何もしていないようです。
すなわち。私はすべての文字を一致させようとしています
echo preg_replace('#[.\r\n]*?-+.+-+#', '', $str);
ここでは、 までのすべての文字を一致させようとしてい
-+.+-+
ます。s 修飾子を使用していないため、.
代わりに実行できますが、ここでも機能しません。[^\r\n]
代わりに、存在しない-+.+-+
かのようにパーツを一致させるだけです。[.\r\n]*?
何か案は?