Mastering Regular Expressions,3rd

Posted by admin | 翻译, 正则表达式, 原创, 转载, 好书 | 星期四 26 7月 2007 11:06 上午

最后,根据我翻译《MRE3》英文目录和《BRE》全书的体会谈一点有关这两本书的肤浅认识。

虽然我有《MRE3》这本书的电子版,但并没有看过--确实没有时间。从今天试译《MRE3》目录并对照学习《MRE3中》目录(以 china-pub 网站提供的目录为准)的体会来看,首先有以下几点个人认为值得注意或者商榷的问题。

注:下文中“《MRE3中》的目录”均指 china-pub 提供的网站目录内容(因为我没见到纸版书,等见到纸版书我会再确认)。

1. 《MRE3中》的目录中缺少第3章第3节的第3小节 Unicode 部分;

2. 《MRE3中》的目录的第4章第2节中的第2和第4小节 Rule 1: The Match That Begins Earliest Wins 和 Rule 2: The Standard Quantifiers Are Greedy 余晟老师分别译为:

“规则1:优先选择最左端的匹配结果”和“规则2:标准量词是匹配优先的”

我的拙译为:

“规则 1:最先开始的位置优先匹配”和“规则 2:标准的限定符是贪婪的”

估计余晟老师决定将 Begins Earliest 译为“最左端”是受同一章第6节的“The Longest-Leftmost(最长最左)”的影响;而将“The Standard Quantifiers Are Greedy”译为“标准量词是匹配优先的”,一是因为 Quqntifiers 的直观含义就是“量词”;二是觉得把 Greedy 译为“贪婪的”有点不像计算机术语。当然,这是我的估计。但我对这两条规则的译法不同,是因为如下理由:

Begins Earliest 如果直译应该是“最早开始”。对于我们中文、英文等等常见的从左到右书写的语言来说,一行文本的最早开始处匆庸置疑就是“最左端”。但是,对于像阿拉伯文(参考网文)或希伯来文(参考网文)这样从右往左书写的语言来说,一行文本的最早开始处应该是“最右端”。虽然我也没有见过以上两种从右往左书写的语言(即使见过我也不认识),但通过翻译《BRE》我知道了这一点,而且在 .NET 中 Regex 类有一个 RightToLeft 属性专门用于指定正则表达式从右往左匹配。所以,我使用了“最先开始”这个译法(不论是从左往右书写,还是从右往左书写都适用)。

对于 Quantifier,最早在刚开始翻译《BRE》时我也译成了“量词”--表示匹配数量嘛,也没错。但后来翻了翻自己再早翻译的《Teach Yourself Regular Expressions in 10 Minutes(10分自学正则表达式)》,其中的译法是“限定符”,当时感觉有点不对劲,再上网猛搜一番,发现很多网友也都使用“限定符”这个术语,经过认真斟酌最终决定“痛改前非”,把先前所有“量词”给替换成了“限定符”。因为像 *、+、? 以及 {n,m} 这样的元字符及语法形式所起的作用就是限定数量,限定符叫着也比较舒服,好像也很专业--毕竟“量词”是研究词汇的一个术语,直接借用容易令人混淆。而且,微软 MSCN 中 XML 架构正则表达式中的一节,我觉得也可以作为参考。

至于将 Greedy 译为“贪婪的”也是直译,当初我在翻译《Teach Yourself Regular Expressions in 10 Minutes(10分自学正则表达式)》时也曾经为这个问题踌躇过,后来决定采用“贪婪”和“懒惰(lazy)”也是经过一番思想斗争的。因为所谓“贪婪”就是指尽可能匹配最多的字符,而不管在中间有没有(适可而止的)匹配项;而“懒惰”其实就是“适可而止”或者说尽可能匹配最少的字符。虽然“贪婪”和“懒惰”的确不像是计算机术语,但我觉得还没有更好的“术语”来表达这两种匹配方式的意思,至少说“贪婪匹配”总比“尽可能多地匹配”来得简洁一些。

3. 《MRE3中》的目录第7章第5节第4小节 Iterative Matching: Scalar Context, with /g ,余晟老师译为:

“迭代匹配:ScalarcContext,不使用/g”

但好像应该译成“遍历匹配:带 /g 的标量环境”,大致的意思吧,主要是“带 /g” 或者“使用 /g”,而不是“不使用 /g”。当然,如果纸版书确实如此那应该是不小心译反了的。

4. 《MRE3中》目录中第8章第6节第1小节 Adding Width and Height Attributes to Image Tags ,余晟老师译为:

“为Image Tag添加宽度和高度属性”

我觉得应该把 Image Tag 译为“图像标签”为好。

5. 《MRE3中》目录中第10章第3节下面缺少7个小节分别介绍 preg(PHP 中的 Perl 兼容正则表达式函数族)七个函数的目录内容(根据英文版目录)。

6. 《MRE3中》目录中第10章第4节下面缺少1个小节介绍(“遗漏的”/“缺失”的) preg_regex_to_pattern 函数的目录内容(根据英文版目录)。

7. 《MRE3中》目录中第10章第7节第2小节 Checking Tagged Data for Proper Nesting,余晟老师翻译为:

“检查tagged data的嵌套正确性”

而我觉得似乎应该译为:

“检测带标签的数据是否有效嵌套”

因为 Tagged Data 是指“带标签的数据”,而且例子内容中也是以 XML 和 HTML 标签作为测试文本的。

8. 最后,余晟老师在第7到第10章的章名中直接采用了英文版的章名,即

第7章 Perl
第8章 Java
第9章 .NET
第10章 PHP

我觉得《MRE》英文版直接使用了4种语言的名称,但翻译成中文,还是译为:

第7章 Perl 中的正则表达式
第8章 Java 中的正则表达式
第9章 .NET 中的正则表达式
第10章 PHP 中的正则表达式

或类似的形式为好。

因为在《BRE》这本书中也存在着同样的问题,该书介绍了 16 种应用软件、工具和编程语言中的正则表达式功能,但英文章名直译过来就是像下面这样:

第21章 VISUAL BASIC .NET 与正则表达式
第22章 C# 和正则表达式
第23章 PHP 和正则表达式
第25章 JAVA 中的正则表达式
第26章 PERL 中的正则表达式

3 条评论 »

  1. 广播 (Pingback) 作者 乱象&乱想 » 有心人 — 2007-08-01 @ 11:52 上午

    […] 原来已经有细心热心(同时也在翻译正则表达式相关的书籍) 的朋友,对比了网上已经公布的《精通正则表达式》的片段,细细列出原文、我的译文和他的译文,并指出多处漏排和一处错译,另提出若干商榷之处。 […]

  2. 评论 作者 Wahoo — 2007-10-07 @ 1:56 上午

    Thank you for sharing!

  3. 评论 作者 admin — 2007-10-07 @ 2:50 下午

    :)

对这篇文章的评论的 RSS 聚合。 TrackBack URI

发表您的评论

验证码  If you cannot see the CheckCode image,please refresh the page again!