如何在进入不同步骤/数组/位置的两个标签之间捕获多行正则表达式

我使用 TCPDF 生成一些复杂的 PDF,所以问题出在 PDF 中,而不是标准网页中


我试图在 2 个标签之间获取文本,包括两个标签:[#SCHANGE#]和[#ECHANGE#]。


我正在使用这个正则表达式:


preg_match('/(?:\[#SCHANGE#\]((?:.*?\r?\n?)*)\[#ECHANGE#\])+/m', $textV, $StartEndChange);

$textV 是来自 foreach 循环的动态值,例如:


foreach($text as $textV){


    //some code here..


}

内部可能有不同的情况,例如:


$text = array (

    "0" => "[#SCHANGE#] same text [#ECHANGE#]" //This is okay, regex works in this case

) ;

但是当$text只有一个标签时,这个正则表达式不起作用,然后我遇到了这种情况:


$text = array (

    "0" => "[#SCHANGE#]same text",

    "1" => "some text",

    "2" => "some text",

    "3" => "some text",

    "4" => "some text",

    "5" => "some text",

    "6" => "some text",

    "7" => "some text [#ECHANGE#]"

) ;

那么:如果标签不在同一个文本中,我如何获取包括两个标签在内的 2 个标签之间的文本?


我无法分解数组,因为里面的所有文本都已$text格式化,并且可以与上一个或下一个不同的方式打印


宝慕林4294392
浏览 160回答 3
3回答

慕雪6442864

我会先对数组进行内爆,然后在字符串中搜索:$text = array (    "[#SCHANGE#]same text",    "some text",    "some text",    "some text",    "some text",    "some text",    "some text",    "some text [#ECHANGE#]",    "blah blah",    "[#SCHANGE#]other text[#ECHANGE#]") ;$all_text = implode("\n", $text);preg_match_all('/\[#SCHANGE#\][\s\S]+?\[#ECHANGE#\]/', $all_text, $matches);print_r($matches);输出:Array(    [0] => Array        (            [0] => [#SCHANGE#]same textsome textsome textsome textsome textsome textsome textsome text [#ECHANGE#]            [1] => [#SCHANGE#]other text[#ECHANGE#]        ))
打开App,查看更多内容
随时随地看视频慕课网APP