查找由特定字符包装的文本,并将该文本用作函数的参数

时间:2011-04-13 17:23:52

标签: php regex function replace find

我正在从数据库向页面输出一些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。

提前致谢。

2 个答案:

答案 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是您的源文本。