在PHP中,我正在迭代MS Word文档的XML来清理XML,这样我就可以用用户输入的文本一致地替换给定格式的文本。
Word文档中“变量”的格式为$ {variablename}
例如, $ {name} 会被 John
取代但是,Word经常在文本的字母之间放置杂散的空XML标记,所以我现在有以下行来清理Word文档的XML以删除这些空标记:
$xml = preg_replace_callback('/\$\{(.*?)\}/is', function ($matches) { return "\${".strip_tags($matches[1])."}"; }, $xml);
例如,上面的代码行目前可以替换以下内容:
${user<w:t></w:t>_title}
使用:
${user_title}
但是,我有时也会在美元和开放括号之间找到杂散的空XML标记,例如:
$</w:t></w:r><w:r w:rsidR="00F13D11"><w:t>{user_mail}
我已经尝试了一些正则表达式的变体,但无法让它工作。我需要正则表达式去除$和{之间的任何标签,但是只有它们是空的并且标签之间没有其他字母数字字符。
例如,我需要 not 的语句匹配以下示例:
$</w:t></w:r>stray word here<w:r w:rsidR="00F13D11"><w:t>{user_mail}
我也欢迎任何有关如何确保捕获开始和结束标记的建议,以免留下孤立标记。例如。在上面一行中,美元符号后面有两个未开启的标签。
提前感谢您的任何意见!