假设我有以下字符串:
$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]*?没有退出一样。
有任何想法吗?