正如本书的每位审稿人都强烈指出的,以及几乎每个程序员立即认识到的:每个程序员和软件开发人员肯定都在日常工作中使用过正则表达式。我不指望向我的许多读者介绍全新概念,或者至少我不期望向他们介绍“正则表达式”这个概念。
在本书中,除了正则表达式本身,代码通常都是使用Python编程语言编写的。在含有“AI想法”的难题中,这一点尤为明显,这些想法是从GitHub的Copilot或OpenAI的ChatGPT中获取的。事实证明,这些工具目前经常拒绝“编写一个正则表达式来做某事”的请求,但通常很乐意接受“使用正则表达式编写Python程序”来完成同样任务的请求。
我在Python社区中已经活跃了20多年,因此十分喜爱该语言。但本书讨论的封装正则表达式的特定编程语言相对次要,使用其他语言的程序员可快速理解如何定义变量名、创建函数以及偶尔将正则表达式操作封装在条件if代码块中。所有这些简单结构在你经常使用的任何编程语言中都有非常相似的对应关系,任何读者都应该能轻松转换这些结构。
互联网上有海量关于正则表达式的入门教程。我推荐你阅读其中一些。Python编程语言的官方文档包含了一个很好的教程。实际上,本书附录包含了我写的一个教程;根据页面受欢迎程度来衡量,多年来,该附录已成为最受欢迎的教程之一。当然,本书正文并不是这样的教程,否则将失去出版意义。
本书读者对象
本书面向好玩的程序员和希望扩展理解并重新思考假设(仅关于一些较小问题)的程序员。阅读本书前,你应该先保证能够理解和使用“正则表达式”工具。如果你对正则表达式一无所知,可先阅读附录;附录将帮助你充分理解正则表达式。
本书还适合数百万软件开发人员阅读,他们已经了解到关于AI编程工具的有趣而热烈的讨论,并可能已经开始使用这些工具。这些工具具有很大潜力,其实用性也将在未来不断增强;它们也有限制,即使技术改进,限制也不会完全消失。使用工具来协助编码是很好的,但有必要了解工具的适用范围和限制。
获取本书中使用的工具
Python编程语言被用作本书中许多正则表达式示例的封装器,可以在Python软件基金会的官方网站(https://www.python.org/downloads)获得免费软件。各种其他组织也创建了定制的Python发行版,这些发行版具有与相同核心编程语言捆绑在一起的附加功能或不同的功能。实体中包括许多操作系统(过去10年的大多数Linux发行版和macOS以及可从微软商店获得的Windows版本)供应商。
Copilot是本书中讨论的AI编程工具之一,可从GitHub(https://github.com/ features/copilot)获得。在撰写本书时,该服务被视为订阅服务,但可在试用期内免费使用。你需要拥有GitHub账户才能使用Copilot。Copilot与编程编辑器集成,并非独立工具;上述GitHub网址中包含将Copilot集成到Visual Studio、Neovim、VS Code和JetBrain IDE中的说明。第三方提供了将Copilot与其他编辑器(如Emacs和Sublime Text)集成的机制。订阅Copilot的GitHub用户也可在GitHub Codespaces中使用它,该服务在Web浏览器环境中提供了一个VS Code版本(http://github.com/features/codespaces)。
ChatGPT是本书中详细讨论的第二个AI编程工具。OpenAI目前提供了ChatGPT的免费研究预览版(https://chat.openai.com/chat);很可能在未来预览期结束后,通过某种付费订阅方式提供服务。用户与ChatGPT交互所用的界面类似于聊天应用程序的网页。然而,一些第三方已经创建了其他机制,用其他方式通过API与ChatGPT进行通信。
其他公司和开源项目还提供与Copilot和ChatGPT行为大致相似的AI编程工具,包括Tabnine(https://www.tabnine.com/getting-started)、K-Explorer (https://k-explorer.com/)和CodeGeex(https://github.com/THUDM/ CodeGeeX)。未来一定会创建其他类似的工具。
引用作品
n David Mertz的The Puzzling Quirks of Regular Expressions(ISBN:9781312160743;2021年8月)包含了本书中的难题的早期版本,但没有讨论AI编程工具,也没有附录中的教程。
n Terminator 3: Rise of the Machines是2003年由Jonathan Mostow执导的电影。
n 虚构的日本机器人公司“思博尔公司”(Cyberdyne)出现于Terminator系列片中。
n Are Friends Electric?是Gary Numan于1979年推出的一首歌曲。
n Do Androids Dream of Electric Sheep是Philip K. Dick于1968年写的一篇短篇小说。
n “下一场战争将用棍棒和石头进行”常被认为出自Albert Einstein之口,指的是一场可能的核战争的后果。Einstein确实发表过类似的明确评论,但同时期也有其他许多人发表过类似的言论。
n “我的思维正在消逝;我能感觉到”出自Stanley Kubrick于1968年执导的电影《2001太空漫游》,由机器人角色HAL 9000所说。
n 《非凡的机器》是Fiona Apple于2005年推出的歌曲专辑。
n 笑话“计算机科学中有几件难事:缓存失效、命名对象和差一错误”可能出自Tim Bray,尽管自2014年以来,它已经被引用多次,但实际出处仍不确定。
n 《战争的惨状》是Gene Wolfe于1970年写的一篇短篇小说。
n “我想成为一台机器”是Billie Currie和John Foxx于1976年推出的一首歌曲。
n “扑克脸”是Lady Gaga于2008年推出的一首歌曲。
n 《自然界的分形几何》是Beno?t Mandelbrot于1982年所著的一本书。
n J.B.S. Haldane的一个评论很著名:如果上帝创造了地球上的所有生物,那么他一定对甲壳虫有“异常的偏爱”。但是,考虑到地球上大约80%的动物是线虫,我认为Haldane所说有误。
n “学习使用正则表达式”是David Q. Mertz之前编写的在线教程,其中包含本书附录中的大部分内容。