【问题标题】:PHP Regular Expression to match define() functionPHP正则表达式匹配define()函数
【发布时间】:2010-08-20 18:42:51
【问题描述】:

我正在翻译 php 脚本,并希望通过一些自动化来获得一些时间 该文件包含大量这样的行

define('LNG_NewsletterNameIsNotValid', 'Email Campaign name is not Valid');
define('LNG_UnableToCreateNewsletter', 'Unable to create an Campaña de Email');
define('LNG_HLP_NewsletterName', 'You must insert \\\'Custom Fields\\\' in the field.');
define('LNG_UnableToUpdateNewsletter', 'Unable to update '. LNG_xxx . ' from Email Campaign');

我想:

  • 打开每个php文件
  • 遍历每一行
  • 获取每个define()对应的字符串
  • 在我应该写翻译的地方放一个字段
  • 将新字符串保存到文件中

我的脚本差不多完成了,除了从每一行获取要翻译的字符串的部分。我举了几个例子,这样你就可以看到翻译字符串可以包含对其他变量、引号等的引用。

我需要一个正则表达式,对吗?
谁能帮我一个?

【问题讨论】:

  • 就这么清楚(er) "define('stringX', 'stringY');"应该变成“define(tokenX, tokenY);”...对吧?

标签: php regex string file-io


【解决方案1】:

使用token_get_all 可能会更好。虽然正则表达式可能会得到其中的大部分,但它没有正确解析 PHP 所需的复杂性 (just like regexes can't parse html)。 token_get_all 只会错过边缘情况,例如使用变量函数或 eval'ing 文本。

如果您进行语言翻译,可能值得研究 gettext 而不是使用 define

【讨论】:

  • 肯德尔,太棒了。我无法更改 gettext 的定义,因为我不是脚本的开发人员,但我会将该建议发送给他们。谢谢!
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 2010-11-14
相关资源
最近更新 更多