"Sed和PHP关联数组"

3

我有一段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'));
?>

怎么做呢?

2个回答

0
如果这是整个文件,并且格式特定,那么您可以使用类似以下的sed命令:
sed "s/\\('[^']*'\\)\\([,)]\\)/_(\\1)\\2/g" b.php

否则,可以查看token_get_all()以获取完整的精确解析器。您可以读取PHP文件,然后使用token_get_all()来确定数组中字符串的确切位置,然后将其替换为所需的字符串并呈现修改后的源代码。

可能需要将逗号设为可选项,因为最后一个数组值没有逗号。但是,这个更改会破坏正则表达式的匹配,因此您可能还要考虑在数组值之前匹配 =>\s* - nickb
请记住,这不会处理像'Na'zwa'这样在PHP中完全有效的字符串。还有双引号分隔的字符串。 - Ariel
这将替换文件中的所有内容。您需要它更智能,只替换数组值。(即在=>之后) - Ariel
1
@Ariel,使用正则表达式和sed使其完全防弹会非常复杂。如果这是整个文件,并且以该特定格式呈现,则可以正常工作。如果不是,那么PHP分词器将执行更好的工作。 - rid

0

使用 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'));
?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接