将OOXML段与字符串匹配

时间:2017-11-16 06:33:55

标签: regex pattern-matching preg-match

我有OOXML文档,我需要在其中替换段落,在其中插入表格,在我的例子中它是简单的字符串$(test)

我在这里准备正则表达式https://regex101.com/r/ZTMlEc/2/

我尝试制作但没有运气,它与第一个匹配

我需要以:

开头的匹配块
<w:p w:rsidR="0035180D" w:rsidRDefault="00C7412B" w:rsidP="00945FB5"> 

并结束

</w:p>

以便以后替换

问题是文档中可能还有很多其他段落,我试过,但是不能创建正则表达式以完全匹配这个段落,那么内部标签可能会有所不同。

我需要使用此XML作为字符串,并且不能使用XML库。

1 个答案:

答案 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
    );
}
相关问题