PHP正则表达式,以包括其他条件



我有一个php正则表达式,它可以工作,但我想修改它,使其包含另一个条件

preg_match_all('/-----BEGIN CERTIFICATE REQUEST-----[^-]*-----END CERTIFICATE REQUEST-----/s', $file, $matches);

我正在加载一个字符串文件,其中包含以下文本块

-----BEGIN CERTIFICATE REQUEST-----
MIIEezCCA2MCAQAwcjELMAkGA1UEBhMCVVMxDTALBgNVBAgMBFV0YWgxDTALBgNV
ObtIDOoce4eY4Z76AbLUDVuiIZEDI95Rlt6Ha5/DVJZtoljkVQ42RrmP/Yu26Xk=
-----END CERTIFICATE REQUEST-----
-----BEGIN NEW CERTIFICATE REQUEST-----
AHAAdABvAGcAcgBhAHAAaABpAGMAIABQAHIAbwB2AGkAZABlAHIDAQAwgc8GCSqG
SIb3DQEJDjGBwTCBvjAOBgNVHQ8BAf8EBAMCBPAwEwYDVR0lBAwwCgYIKwYBBQUH
-----END NEW CERTIFICATE REQUEST-----

目前,上面的正则表达式捕获第一个块,但没有捕获第二个块,我如何改进正则表达式以同时捕获这两个块?第二个块在页眉和页脚中具有额外的单词NEW。理想情况下,我希望单个正则表达式是灵活的,并捕获非此即彼。

根据我之前的评论,也许可以尝试其中一种:

-----BEGIN (?:NEW )?CERTIFICATE REQUEST-----[^-]*-----END (?:NEW )?CERTIFICATE REQUEST-----

或者:

-{5}BEGIN ((?:NEW )?CERTIFICATE REQUEST-{5})[^-]*-{5}END 1

在此处查看它如何处理字符串。在这两种情况下,你所追求的关键都是包括CCD_;新";。在我的第二个模式中,我只是捕捉到了这个选项,将重复文本包含到一个捕捉组中,我在稍后的参考中使用了这个捕捉组。

最新更新