将 OOXML 段落与字符串匹配
Match OOXML paragraph with string
我有 OOXML 文档,我需要替换其中的段落,以在其中插入 table,在我的例子中是简单的字符串 $(test)
这里我准备正则表达式https://regex101.com/r/ZTMlEc/2/
我试着做到,但运气不好,它从一开始就匹配
我需要以 :
开头的匹配块
<w:p w:rsidR="0035180D" w:rsidRDefault="00C7412B" w:rsidP="00945FB5">
结束
</w:p>
以后替换
问题是文档中可能还有许多其他段落,我尝试了,但无法创建正则表达式来完全匹配这个段落,因为它的内部标签可能不同。
我需要像字符串一样使用这个 XML,不能使用 XML 库。
我用其他方法解决了这个问题。
我只 select 所有 <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
);
}
我有 OOXML 文档,我需要替换其中的段落,以在其中插入 table,在我的例子中是简单的字符串 $(test)
这里我准备正则表达式https://regex101.com/r/ZTMlEc/2/
我试着做到,但运气不好,它从一开始就匹配
我需要以 :
开头的匹配块<w:p w:rsidR="0035180D" w:rsidRDefault="00C7412B" w:rsidP="00945FB5">
结束
</w:p>
以后替换
问题是文档中可能还有许多其他段落,我尝试了,但无法创建正则表达式来完全匹配这个段落,因为它的内部标签可能不同。
我需要像字符串一样使用这个 XML,不能使用 XML 库。
我用其他方法解决了这个问题。
我只 select 所有 <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
);
}