0

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

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

像这样的字符串:

[_家]

[_消息]

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

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

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

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

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

preg_replace($pattern, $replacement, $htmlPage);
4

2 回答 2

2

在 RegEx 中,[]是运算符,因此如果您使用它们,则需要对它们进行转义。

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

/\[_.*?\]/

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

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

_通过在后面加上大写字母,您可能会更好地收缩。喜欢,

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

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

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

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

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

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

于 2012-08-09T12:45:31.677 回答
-1

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

无需通过引入正则表达式来使此类事情变得更复杂。

于 2012-08-09T12:35:49.780 回答