用 PHP 替换 HTML 页面中的特殊字符串


replace special strings in a html page by php

我正在寻找一种方法,将整个页面中看起来相似的所有字符串替换为它们定义的值

请不要向我推荐其他包含语言常量的方法。

像这样的字符串:

[_HOME]

[_NEWS]

它们在 [_*] 部分中看起来都一样

现在最大的问题是如何扫描HTML页面并替换定义的值。

解析 html 页面的一种方法是使用 DOMDocument,然后pre_replace() 它

但我的主要问题是为替换编写模式

$pattern = "/[_i]/";
$replacement= custom_lang("/i/");
$doc = new DOMDocument();
$htmlPage = $doc->loadHTML($html);
preg_replace($pattern, $replacement, $htmlPage);

在正则表达式中,[]是运算符,所以如果你使用它们,你需要转义它们。

表达式的其他问题是_*哪个将匹配零或多个_。您需要将其替换为一些有意义的匹配,Like,_.*它将匹配_和之后的任何其他字符。所以你的完整表达变成了,

/'[_.*?']/

嘿,为什么?,你可能会想问:原因是它执行非贪婪的匹配。喜欢

[_foo] [_bar]查询字符串,那么贪婪匹配应返回一个匹配项并为您提供整个匹配项,因为您的表达式对该字符串完全有效,但非贪婪匹配将使您获得两个单独的匹配项。 (更多信息)

通过有一个_后跟大写字母,你可能会更好地限制。喜欢

/'[_[A-Z]+']/

更新:使用匹配的字符串并替换它们。为此,我们使用称为反向引用的概念。

考虑修改上面的表达式,将字符串括在括号中,例如/'[_([A-Z]+)']/

现在,在preg-replace参数中,我们可以通过用 $1 反向引用它们来使用括号中的表达式。所以你可以使用的是,

preg_replce("/'[_([A-Z]+)']/e", "my_wonderful_replacer('$1')", $html);

注意:我们需要e modifier将第二个参数视为 PHP 代码。(更多信息)

如果您

知道要替换的完整关键字(例如 [_HOME] ),那么您可以使用 str_replace() 替换所有实例。

无需通过引入正则表达式使这样的事情变得更加复杂。