【问题标题】:Sed and PHP assoc arraySed 和 PHP 关联数组
【发布时间】:2012-07-15 18:06:33
【问题描述】:

我有 PHP 代码:

<?php
$vF = array('nazwa' => 'Nazwa', 'telefon' => 'Telefon', 'email' => 'E-mail', 'adres' => 'Adres');
?>

我想用 sed 把它改成这样:

<?php
$vF = array('nazwa' => _('Nazwa'), 'telefon' => _('Telefon'), 'email' => _('E-mail'), 'adres' => _('Adres'));
?>

我该怎么做?

【问题讨论】:

    标签: php sed gettext


    【解决方案1】:

    如果这是整个文件,并且采用该特定格式,那么您可以将sed 与以下内容一起使用:

    sed "s/\\('[^']*'\\)\\([,)]\\)/_(\\1)\\2/g" b.php
    

    否则,请查看token_get_all() 以获得完整的精度解析器。您可以阅读您的 PHP 文件,然后使用 token_get_all() 找出数组中字符串的确切位置,然后您可以将它们替换为您想要的字符串并呈现修改后的源代码。

    【讨论】:

    • 可能需要将逗号设为可选,因为最后一个数组值没有逗号。但是,此更改会破坏正则表达式,因此您可能还需要考虑在数组值之前匹配 =&gt;\s*
    • 请记住,这不会处理像 'Na\'zwa' 这样在 PHP 中完全有效的字符串。还有双引号分隔的字符串。
    • 这将替换文件中的所有内容。你需要它更聪明,只替换数组值。 (即=&gt;之后)
    • @Ariel,使用正则表达式和 sed 使其防弹是非常复杂的。如果那是整个文件,并且采用该特定格式,它将正常工作。如果没有,那么 PHP 标记器会做得更好。
    【解决方案2】:

    perl

    perl -pe 's/(?<=> )([^,]+)(?=[,;])/_($1)/g' foo.php
    

    测试:

    $ cat foo.php
    <?php
    $vF = array('nazwa' => 'Nazwa', 'telefon' => 'Telefon', 'email' => 'E-mail', 'adres' => 'Adres');
    ?>
    
    $ perl -pe 's/(?<=> )([^,]+)(?=[,;])/_($1)/g' foo.php
    <?php
    $vF = array('nazwa' => _('Nazwa'), 'telefon' => _('Telefon'), 'email' => _('E-mail'), 'adres' => _('Adres'));
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多