如何解决什么是最好的正则表达式模式,它可以捕获包含在 gettext 函数中的 .php 页面中的所有文本下面的示例
以下是一些可能在 php 页面中的代码,其中有一些应该考虑的变化(从最重要到最不重要):
module.exports = [
{
entry: {
main_layout: "./app/assets/layouts/main_layout.ts",home_page: "./app/assets/pages/home/home.ts"
},output: {
filename: "[name].bundle.js",path: path.resolve(__dirname,"app","assets","dist")
},...
理想情况下,预期输出如下所示:
<p><?= $translator->gettext('string example') ?></p>
<p><?= sprintf($translator->gettext("string example n2"),Dave) ?></p>
<p><?= $translator->ngettext('string example','string examples',2) ?></p>
<p><?= sprintf($translator->ngettext("string example n2","string examples n2",2),2) ?></p>
<p><?= $translator->pgettext('Context1','string example') ?></p>
<p><?= translator->npgettext('Context2','string example',2) ?></p>
基本上第一个数组将有上下文来知道哪个 gettext 函数正在包装文本。第二个数组将只是包装的文本。以便它可以用于自动翻译。
现在,这是我尝试过的:
array(2) {
[0]=>
array(4) {
[0]=> string(44) "<?= $translator->gettext('string example') ?>"
[1]=> string(44) "<?= $translator->gettext('string example n2') ?>"
[2]=> string(44) "<?= $translator->ngettext('string example',2) ?>"
[3]=> string(44) "<?= $translator->ngettext('string example n2','string examples n2',2) ?>"
[4]=> string(44) "<?= $translator->pgettext('Context1','string example') ?>"
[5]=> string(44) "<?= $translator->npgettext('Context2',2) ?>"
}
[1]=>
array(4) {
[0]=> array(1) { [0]=> string(13) "string example" }
[1]=> array(1) { [0]=> string(13) "string example n2" }
[2]=> array(2) {
[0]=> string(13) "string example"
[1]=> string(13) "string examples"
}
[3]=> array(2) {
[0]=> string(13) "string example n2"
[1]=> string(13) "string examples n2"
}
[4]=> array(1) {
[0]=> string(13) "Context1"
[1]=> string(13) "string example"
}
[5]=> array(2) {
[0]=> string(13) "Context2"
[1]=> string(13) "string example"
[2]=> string(13) "string examples"
}
}
}
但这种模式只能让我获得第一个实例:preg_match_all('/<\?= \$translator->gettext\(\'([^\']+)\'\) \?>/',$contents,$matches,PREG_PATTERN_ORDER);
并想念所有其他人。
编辑:另外,如果正则表达式不能解决这个问题,那怎么办?
解决方法
Regex 可以很好地完成这项工作。以下是前两种情况的模式:
获取文本:
preg_match_all('/\$translator\s*->\s*gettext\s*\(\s*(\"([^\"]+)\"|\'([^\']+)\'\s*)\)/',$contents,$gettextMatches,PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE );
ngettext :
preg_match_all('/\$translator\s*->\s*ngettext\s*\(\s*(\"([^\"]+)\"|\'([^\']+)\')\s*,\s*(\"([^\"]+)\"|\'([^\']+)\')\s*,\s*\.*([^\)]+\s*)\)/',$ngettextMatches,PREG_PATTERN_ORDER|PREG_OFFSET_CAPTURE);
输出将需要根据需要进行格式化。如果有人需要它们但不知道如何,我可以为 pgettext 或 npgettext 案例构建模式。只需评论或给我发消息,我就会提供帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。