Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式将包含其他标准_Php_Regex - Fatal编程技术网

PHP正则表达式将包含其他标准

PHP正则表达式将包含其他标准,php,regex,Php,Regex,我有一个php正则表达式,它可以工作,但我想修改它以包含一个条件 preg_match_all('/----开始证书请求----[^-]*----结束证书请求----/s',$file,$matches); 我正在加载一个包含以下文本块的字符串文件 ----开始证书请求----- Miieezcca2mCaqawcjelmakga1EBHMCVVMXDTALLBGNVBagMBFv0YWGXDTALLBGNV OBTIDOCE4EY4Z76ABLUDVUIIZEDI95RLT6HA5/DVJZ

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

preg_match_all('/----开始证书请求----[^-]*----结束证书请求----/s',$file,$matches);
我正在加载一个包含以下文本块的字符串文件

----开始证书请求-----
Miieezcca2mCaqawcjelmakga1EBHMCVVMXDTALLBGNVBagMBFv0YWGXDTALLBGNV
OBTIDOCE4EY4Z76ABLUDVUIIZEDI95RLT6HA5/DVJZtoljkVQ42RrmP/Yu26Xk=
-----结束证书请求-----
-----开始新证书请求-----
AHAAADBVAGACGBHAHAAAAABPAGMAIAABQAHIABWB2AGKAZABLAHIDAQAWGC8GCSQG
SIB3Dqejdjgbwtcbvjaobgnvhq8baf8ebamcbpawewydvr0lbawwcgyikwybquh
-----结束新证书请求-----

目前,上面的正则表达式捕获第一个块,但不捕获第二个块,如何改进正则表达式以捕获这两个块?第二个块在页眉和页脚中有一个额外的单词
NEW
。理想情况下,我希望单个正则表达式具有灵活性,可以捕获或。

根据我之前的评论,可以尝试以下任一方法:

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


看看这是如何处理字符串的。在这两种情况下,您所追求的关键是包含
(?:NEW)?
以选择性地包含文字“NEW”。在我的第二个模式中,我只是将这个选项(包括重复文本)捕获到一个捕获组中,我在后面的参考中使用了这个捕获组。

是的,这很有效。请将其作为正式答案,以便我能将其标记为有用您的原始工作很好。。这是另一个变体吗?您提供的更新版本不起作用,原来的版本起作用了。我们如何着手在“新”之外添加第二个可选条件,我还需要添加“EC”。提前谢谢!我用
(?:NEW | EC)?
-{5}BEGIN ((?:NEW )?CERTIFICATE REQUEST-{5})[^-]*-{5}END \1