假设我有以下字符串:
$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--
(两边都有两个-),也可能是-----BEGIN RSA PRIVATE KEY-----
类似的东西。
无论如何,这是我尝试过的:
echo preg_replace('#.*?-+[^\r\n]-+#s', '', $str);
-+[^\r\n]-+
与上述匹配-----BEGIN CERTIFICATE-----
,我试图将每个字符与 .*? 但它不起作用。它停在-----END CERTIFICATE-----
not at the-----BEGIN CERTIFICATE-----
。echo preg_replace('#.*?-+[^\r\n]-+#s', '', $str);
和以前一样。即使?,在这种情况下,应该改变贪婪,它实际上似乎并没有真正做任何事情。
IE。我正在尝试将每个字符匹配到
echo preg_replace('#[.\r\n]*?-+.+-+#', '', $str);
在这里,我试图匹配每个字符,包括
-+.+-+
. 我可以这样做.
,[^\r\n]
因为我没有使用 s 修饰符,但它在这里也不起作用。相反,它只是匹配-+.+-+
部分,就好像[.\r\n]*?
没有退出一样。
有任何想法吗?