我使用 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/