用正则表达式替换可变文本


Replace variable texts with regular expressions

我正在重新制定我的一个旧程序,并使用TextCrawler自动替换几个代码文件中的文本,但我很难做出以下更改:

我需要找到所有的"文本"功能(示例):

$object->text('TRANSLATE_KEY_A')
$object->text('TRANSLATE_KEY_B')
...

并将其替换为(示例):

__('RETURNED_TEXT_FROM_TRANSLATE_KEY_A', TEXT_DOMAIN)
__('RETURNED_TEXT_FROM_TRANSLATE_KEY_B', TEXT_DOMAIN)
...

其中RETURNED_TEXT_FROM_TRANSLATE_KEY_X是用另一个代码文件中的'text'数组的密钥设置的

array_push($text, array('key' => 'TRANSLATE_KEY_A',
                        'extras' => '',
                        'text' => 'Translated Text A'));
array_push($text, array('key' => 'TRANSLATE_KEY_B',
                        'extras' => '',
                        'text' => 'Translated Text B'));

最终结果应该是:

$object->text('TRANSLATE_KEY_A')
$object->text('TRANSLATE_KEY_B')
...

更换为

__('Translated Text A', TEXT_DOMAIN)
__('Translated Text B', TEXT_DOMAIN)
...

其中有1500多个:(有可能在TextCrawler中使用正则表达式实现这一点吗?如何实现?或者其他想法?感谢

如果您想使用php数组来提供替换数据,那么最好只使用php本身来执行任务。

示例script.php:

// your $text array
$text = array();
array_push($text, array(
    'key' => 'TRANSLATE_KEY_A',
    'extras' => '',
    'text' => 'Translated Text A')
);
array_push($text, array(
    'key' => 'TRANSLATE_KEY_B',
    'extras' => '',
    'text' => 'Translated Text B')
);
...
// create a separate array from your $text array for easy lookup
$data_arr = array();
foreach ($text as $val) {
    $data_arr[$val['key']] = $val['text'];
}
// your code file, passed as first argument
$your_code_file = $argv[1];
// open file for reading
$fh = fopen($your_code_file, "r");
if ($fh) {
    while (($line = fgets($fh)) !== false) {
        // check if $line has a 'text' function and if the key is in $data_arr
        // if so, replace $line with the __(...) pattern
        if (preg_match('/^'$object->text'(''([^'']+)''')$/', $line, $matches)
            && isset($data_arr[$matches[1]])) {
            printf("__('%s', TEXT_DOMAIN)'n", $data_arr[$1]);
        } else {
            print($line);
        }
    }
    fclose($fh);
} else {
    print("error while opening file'n");
}

呼叫:

php script.php your_code_file

只需添加迭代所有代码文件并写入相应输出文件的功能即可。