我正在从数据库向页面输出一些HTML,其中包含如下结构:
<p>Department: *|accounting|*</p>
我想找到并替换用包裹的所有文本和| 并使用中间的单词作为我的翻译函数的变量。
我找到了partial answer。你们可以帮助我了吗?感谢。
这正是我正在寻找的......
$html_from_database = "<p>Department: *|accounting|*</p>";
$updated_html = preg_replace("*|(.*?)|*", translate('accounting'),$html_from_database);
这样的事情可能吗?正则表达式怎么样?是不是太资源密集或贪婪?请注意 |之间的唯一字符和| 将是a-z A-Z -_ 0-9。
提前致谢。
答案 0 :(得分:1)
我会分两步完成,查找匹配项,然后在每一项上调用translate函数并构建生成的字符串。像这样的伪代码:
matches = preg_find(".*(\|([a-zA-Z0-9\-_]*)\|).*", sourceHtml)
foreach match in matches
outputHtml += sourceHtml(section between previous match and this one)
outputHtml += translate(inner group from match)
record end position of match
outputHtml += end of sourceHtml
答案 1 :(得分:1)
尝试这个,我只是测试它并且它可以工作:
preg_match_all('/\|(.*?)\|/', $source, $matches);
foreach($matches[1] as $match) {
$source = str_replace($match,translate($match),$source);
}
$source
是您的源文本。