为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
宝慕林4294392 2021-07-02 14:58:43
我使用 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格式化,并且可以与上一个或下一个不同的方式打印
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

我会先对数组进行内爆,然后在字符串中搜索:


$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 text

some text

some text

some text

some text

some text

some text

some text [#ECHANGE#]

            [1] => [#SCHANGE#]other text[#ECHANGE#]

        )


)


查看完整回答
反对 回复 2021-07-09
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信