我有这样的文字:
_e('Don\'t change this 1...', 'text_to_change');
_e('Don\'t change this extra...', 'text_to_change');
_e('Don\'t change this te...', 'text_to_change');
_e('Don\'t change this text...', 'text_to_change');
如何在PHP中将'text_to_change'
替换为其他内容。我想我应该使用preg_replace
,但事实是我不知道如何使用正则表达式。
我需要的结果:
_e('Don\'t change this 1...', 'some_text');
_e('Don\'t change this extra...', 'some_text');
_e('Don\'t change this te...', 'some_text');
_e('Don\'t change this text...', 'some_text');
我需要它与正则表达式没有其他解决方案。 谢谢。
答案 0 :(得分:2)
您可以使用以下正则表达式:
_e\('.*',\s*'\K[^']*
示例强>:
$text = <<<DATA
_e('Don\'t change this 1...', 'text_to_change');
_e('Don\'t change this extra...', 'text_to_change');
_e('Don\'t change this te...', 'text_to_change');
_e('Don\'t change this text...', 'text_to_change');
DATA;
$text = preg_replace("/_e\('.*',\s*'\K[^']*/", 'some_text', $text);
echo $text;
<强>输出强>:
_e('Don\'t change this 1...', 'some_text');
_e('Don\'t change this extra...', 'some_text');
_e('Don\'t change this te...', 'some_text');
_e('Don\'t change this text...', 'some_text');
答案 1 :(得分:1)
您可以使用preg_replace
,但如果您只想更改固定字符串,则没有多大意义。为什么不使用str_replace
:
$newString = str_replace('text_to_change', 'some_text', $oldString);
如果您担心文本preg_replace
可能出现在其他地方,则值得使用'text_to_change'
。在这种情况下,我猜你可以编写一个正则表达式来匹配那些特定的行。这可能类似于:
$pattern = "^_e\('(.+)', 'text_to_change'\);$";
$newString = preg_replace($pattern, "_e('\1', 'some_text');", $oldString);
如果你正在使用Linux,那么从命令行使用find
和sed
可能更容易,而不是编写自定义PHP脚本:
find . -type f -name '*.php' -exec sed -ir "s/_e\('(.+)', 'text_to_change'\);/_e('\1', 'some_text');/" {} \;
在这里,我们使用find
查找当前目录(-type f
)中名称为.
的所有文件(*.php
)。然后,我们致电sed
更改所提供文件的原位(-i
。
答案 2 :(得分:1)
下面的正则表达式会匹配第二个单引号内的文本。只需将匹配的字符串替换为some_text
。
(?<= \')[^']*
您的PHP代码将是,
<?php
$string = <<<'EOT'
_e('Don\'t change this 1...', 'text_to_change');
_e('Don\'t change this extra...', 'text_to_change');
_e('Don\'t change this te...', 'text_to_change');
_e('Don\'t change this text...', 'text_to_change');
EOT;
$pattern = "~(?<= \')[^']*~";
$replacement = 'some_text';
echo preg_replace($pattern, $replacement, $string);
?>
<强>输出:强>
_e('Don\'t change this 1...', 'some_text');
_e('Don\'t change this extra...', 'some_text');
_e('Don\'t change this te...', 'some_text');
_e('Don\'t change this text...', 'some_text');
<强>解释强>
(?<= \')
Lookbehind实际上用于管理与特定模式匹配的字符串。在我们的例子中,它会查找字符串'
(即空格后跟单引号)。第二个引号满足这个条件。因此,正则表达式引擎仅在第二个单引号之后设置匹配标记。
[^']*
匹配任何不是单引号的字符,零次或多次。