我有OOXML文档,我需要在其中替换段落,在其中插入表格,在我的例子中它是简单的字符串$(test)
我在这里准备正则表达式https://regex101.com/r/ZTMlEc/2/
我尝试制作但没有运气,它与第一个匹配
我需要以:
开头的匹配块<w:p w:rsidR="0035180D" w:rsidRDefault="00C7412B" w:rsidP="00945FB5">
并结束
</w:p>
以便以后替换
问题是文档中可能还有很多其他段落,我试过,但是不能创建正则表达式以完全匹配这个段落,那么内部标签可能会有所不同。
我需要使用此XML作为字符串,并且不能使用XML库。
答案 0 :(得分:0)
我以其他方式解决了这个问题。
我只选择所有<w:p>
标记,然后在每个标记上创建preg_match
,找到第一个具有正确字符串的标记。然后使用str_replace
。
public function insertTable($blockname, $tableText) {
$pregstr = '/<w:p .*?>([^<]*)<\/w:p>/i';
preg_match_all(
$pregstr, $this->tempDocumentMainPart, $matches
);
$replacematch = "";
foreach ($matches[0] as $m) {
preg_match(
'/<w:p .*?>.*?<w:t>\$.*?' . $blockname . '.*?<\/w:p>/ims', $m, $amatches
);
if (count($amatches) > 0) {
$replacematch = $amatches[0];
}
}
$this->tempDocumentMainPart = str_replace(
$replacematch, $tableText, $this->tempDocumentMainPart
);
}