0

私が取り組んでいるプロジェクトの翻訳を作成する必要があります。最も簡単な解決策は、すべての文字列を a に変更して、functioncall(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 の例である matchin "anonymously?" で失敗することです。私が本当に達成したいのは、「t(次に ' または " のいずれかに一致し、' または " and ) に一致したもの以外に一致することです。"

考え:t\(['|"](.*?)[^'|"]\)?

上記の正規表現を機能させることができません。

"['|"] AND )" OR "['|"] AND, array" と一致するように正規表現で AND を実行するにはどうすればよいですか

正規表現で私を助けて、それが機能する理由を説明してください。

ありがとうございました!

4

2 に答える 2

1

関数の引数の解析は非常に複雑かもしれませんが、最初の引数のみを解析する必要がありますが、(簡単にするために)'または でエスケープされた文字列であると常に想定できる"ため、これらの正規表現は一致する可能性があります。"

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

したがって、一致する必要があります:

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

[^\w\d]test1tnoが一致すると仮定し、\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 に答える