【发布时间】:2015-11-11 23:20:55
【问题描述】:
我正在使用 PHPWord 读取我的 docx 模板,并在处理结束时从模板中删除所有搜索模式。 docx 模板中的搜索模式是
${SOMETAG}
text block
${/SOMETAG}
docx 后面的 xml 结构看起来像这样:
<w:p w:rsidR="00E21534" w:rsidRDefault="00E21534" w:rsidP="00E21534"><w:r><w:t>${SOMETAG}</w:t></w:r></w:p><w:p w:rsidR="00E21534" w:rsidRDefault="00E21534" w:rsidP="00E21534"><w:r><w:t>text block</w:t></w:r></w:p><w:p w:rsidR="00E21534" w:rsidRDefault="00E21534" w:rsidP="00E21534"><w:r><w:t>${/SOMETAG}</w:t></w:r></w:p>
这是我为删除开始标记而编写的函数,即 ${SOMETAG} 但它似乎无法找到该标记。我认为问题在于我的 preg_match_all 中的模式。你能告诉我我在这里做错了什么吗?
public function removeSearchPatterns()
{
//search for ${*}
preg_match_all(
'/(${.*})/is',
$this->tempDocumentMainPart,
$matches,
PREG_SET_ORDER
);
//remove ${*}
foreach ($matches as $match){
if (isset($match[0])) {
$this->tempDocumentMainPart = str_replace(
$match[0],
'',
$this->tempDocumentMainPart
);
}
}
}
【问题讨论】:
-
如果将字符串模式更改为 '/\${\/?[a-zA-Z_-]*}/' 有效。这会删除以下模式:namePattern、name-pattern、name_pattern 和类似物
标签: preg-match-all docx phpword