0

我必须为我从事的项目创建翻译。最简单的解决方案是将所有 stings 更改为 afunctioncall(string)以便我每次都可以获得唯一的字符串哈希。

我的代码具有以下不同的t()功能用途:

<label for="anon"><?php echo t('anonymously? (20% extra)')?></label>

exit(t("Success! You made {amount} oranges out of it!", array('amount' => $oranges)));

echo t('You failed.');

我目前的正则表达式是:

$transMatches = preg_match_all('/[^a-z]t\([^)(]+/m', $contents, $matches);

问题是它在#1 示例中失败,匹配“匿名?”。我真正想要实现的是:“匹配 t( 然后匹配 ' 或 " 然后匹配除匹配 ' 或 " 和 ) 之外的任何内容"

主意:t\(['|"](.*?)[^'|"]\)?

我无法使上述正则表达式起作用。

我怎么能在正则表达式中做 AND 以便它匹配 "['|"] AND )" OR "['|"] AND, array"

请帮助我了解正则表达式并解释它为什么有效。

谢谢!

4

2 回答 2

1

解析函数参数可能非常复杂,但您只需要解析第一个参数(为简单起见)可以假设始终是字符串转义的 with'或 with ",因此这些正则表达式可能匹配“

"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"
\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*'

因此,您只需要匹配:

'~[^\w\d]t\(\s*("[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\')~i'

[^\w\d]假设 notest1t将匹配,\s*使您具有空间容忍度...

使用此正则表达式,您将获得如下结果:

'anonymously? (20% extra)'
"Success! You made {amount} oranges out of it!"

而且我无法想象你也需要解析数组的情况,你能在评论/问题中描述它吗?

于 2012-12-08T10:19:48.733 回答
1

这是你需要的吗?

在正则表达式中使用反向引用 - http://www.regular-expressions.info/brackets.html

但是你在做什么看起来很奇怪,为什么?你用一些结果替换函数调用吗?为什么不让它调用函数并从中返回翻译?

于 2012-12-08T10:20:22.573 回答