gpt4 book ai didi

php - 如何捕获属于不同步骤/数组/位置的两个标签之间的多行正则表达式

转载 作者:可可西里 更新时间:2023-10-31 23:00:37 25 4
gpt4 key购买 nike

我使用 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#]"
) ;

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

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

最佳答案

我会先分解数组,然后在字符串中搜索:

$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#]
)

)

关于php - 如何捕获属于不同步骤/数组/位置的两个标签之间的多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56290661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com