正则表达式:使用preg_replace_callback(PHP)

时间:2018-03-19 01:25:28

标签: php regex xml

在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}

我也欢迎任何有关如何确保捕获开始和结束标记的建议,以免留下孤立标记。例如。在上面一行中,美元符号后面有两个未开启的标签。

提前感谢您的任何意见!

0 个答案:

没有答案