让leeon不再眷念马桶——书评《精通正则表达式》

Vue3结合vue-office实现Word文档上传与预览全流程解析 本文详细解析了如何在Vue3项目中集成vue-office插件实现Word文档上传与预览功能。从项目初始化、插件安装到文件上传处理(包括ArrayBuffer转换)、预览优化及常见问题解决方案,提供了一套完整的实现流程,帮助开发者快速实现高效的文档预览功能。 阅读详情

计算的世界大概都是由规则构成的。从最简单的二进制运算,到复杂的格式化文本,以及
构建互联网络的各种协议,整个行业都在几十年如一日的定制、复制和客制化各种规则。
在一切变得越来越复杂的时候,我们终于为“分析这些原本很有规则的数据”发了愁。因
为规则多到一定程度的时候,也就湮没了规则本身。

从一系列的数据中找到规则并描述这些规则的工具,是“正则表达式”——在早期,它确
实就被译作“规则表达式”。更加重要的是,现今的各种语言内置了强大的正则表达式支
持,使得这些“规则”可以被复用、编程,以及用于推理。当然,前提是你需要理解“规
则表达式”自身的规则——那种象天书一样的符号集合。

JavaScript之父曾经创建了一个项目,用一个(内嵌于JS引擎的)规则表达式的子集,实现
了一套JavaScript的语法分析、执行的引擎:“在JS中实现的JS(JS implemented in JS)”。
以分析150k代码为例,这个引擎大概需要8分钟。然而经过对正则表达式的优化,这可以降
到8秒以下。我想,如果Brendan Eich也会用错正则表达式的话,大概没有太多的人能说自
己精通正则表达式了。

在这些不太多的人中,应该包括《精通正则表达式》的作者:Jeffrey E.F.Friedl。当我
看到这本《精通正则表达式》时,我确信了我的这一观点。

仔细地阅读这本大部头的书。我想,对于一个有一定经验的读者,这本书最大的价值在于:
 -让你有机会了解各种正则表达式的流派、起源与差异;
 -让你知道如何有效的优化和评估正则表达式性能;
 -让你精通正则表达式的各种细节和陷井。

事实上,作为语言的使用者,上述这些正是通向精深至境的必由之路。语言之泛化源于种
种环境的影响,却又宥于创生时的本质设定。有机会了解这些源初的设定,对于使用者来
说,当是受益匪浅。而性能、细节与陷井,则是工程中排错调优的法宝,若有《精通正则
表达式》这样的手册在侧,确是省了很多很多的功夫。

对于作者来说,这本《精通正则表达式》最艰难之处大概是在内容的组织上。不管是初学
者还是老手,都很难在正则表达式中找到一个好的学习起点。所幸的事,Jeffrey的确找到
了这样的一个起点。本书的第一、二章会让读者在正则表达式的全然无序中找到一点点清晰
印象。

《精通正则表达式》一书的写法也是我非常之欣赏的。一直以来,向一个不懂或不太了解
正则表达式的开发人员介绍正则表达式的原理,被认为是一项不可能完成的任务。然而在
这本书中,作者使用了非常直观的图例,以至分析正则表达式时的一套完整的描述方法。
所有复杂莫名的(例如perl中用来做嵌套的动态表达式)代码都被解释得一清二楚。

另一方面,余晟的翻译也让我颇有好感。个人之见,读译作最麻烦之处在于一些名词上的
不同翻译法,例如Interface何处译作“接口”与“界面”,便是一大难。很多译者在这样
的问题上备受责难。侯捷先生以前的做法是在书稿前先说明,书稿后附一份对译表,以至
于后来对译表成了一种标准的“侯氏译法”。另一些译者则选用比较便捷的方式,在通用
的译法后面加注英文单词。余晟先生就采用了这样的译法,例如:“一系列字母和数字符
号(alpha numeric characters)”。如果不采用这样的译法,我想中译版难有如此通顺。

读书的时候,想起来朋友leeon。他总喜欢把书捧进厕所,以至于连《程序语言设计-实践
之路》这样的大部头也被他归于“厕所书”之列。我一直以来想告诫他这是一种对生理和心
理都不太好的习惯,但终于没这样做。因为对于一个顽固分子来说,改变他的习惯的唯一方
式,是让他的习惯受到阻碍,而不是某种形式的箴言。

好了,今天终于可以向他推荐这本《精通正则表达式》了。这是我唯一深信leeon不可能用
很长的时间在马桶上阅读的书。因为复杂的正则会写得如同天书一般,而本书中那些浅显明
了的解释,一定会让leeon有一种扼止不住的冲动,以至于要从马桶上弹射到计算机面前去写
段代码来做做测试。

当然,在弹射之前leeon还有一些手续性的工作要做。只是,我想,那根本不是这本书的作
者所要考虑的问题。^.^


又:
-----

不过,我并不满意Jeffrey用Egrep来作为正则初学者的示例。我甚至认为拿Windows平台的
DOS命令行中的那个名为FindStr的小工具来做示例都不错。

Jeffrey显然不是微软的fans,对正则表达式支持最好的perl语言也并不那么特别的亲近微
软的平台。因此Jeffrey没有看到FindStr这样不起眼的小工具,大概也不是什么问题。只
是对于读者来说,要找到一个名为Egrep的工具来做前两章的实验,可不是一件容易的事情。

回到初学者的话题,我仍然建议初学者拿一个惯用的工具来做基本的测试。我分析源代码时
习惯于使用grep(Turbo Grep, 随borland产品发布),这是一个不错的推荐,对于读者来说,
用FindStr也不错。当然如果你所使用的语言支持正则表达式,并且你已经有一定的实用经
验,那么这些建议你权当我没说。

FindStr的基本使用:
----
FindStr /R "<一个正则表达式>" *.txt

grep的基本使用:
----
grep -r+ "<一个正则表达式>" *.txt 

RT-DETR算法优化改进:轻量级上采样CARAFE算子 | 注意力机制大作战 上采样操作CARAFE,具有感受野大、内容感知、轻量级、计算速度快等优点,引入RT-DETR二次创新;1)代替Upsample进行使用; 阅读详情

相关推荐

three.js中如何高效加载并播放GLB格式的3D动画

本文详细介绍了在three.js中高效加载并播放GLB格式3D动画的最佳实践。通过对比GLB与GLTF格式的优势,提供从环境搭建、模型加载到动画控制的完整解决方案,并分享性能优化技巧和常见问题排查方法,帮助开发者提升3D动画项目的开发效率和用户体验。

weixin_27890975的博客 362

迟来的真相:关于JavaScript的历史

今天看到李松峰老师(@李松峰)发布了新版的《JavaScript高级程序设计》(第三版)的预售消息,于是跑去当当(在这里)仔细地读了一下新版有关“JavaScript起源”的段落。读罢,心中的种种不安一扫而空:在这本书的第三版,总算还原了JavaScript起源的真相。   话说有一本《JavaScript权威指南》,以及这本《JavaScript高级程序设计》,算这些年对前端界/JavaSc

aimingoo的专栏 2万+

告别抓包:一个Xposed模块教你监控抖音App的本地数据变化

本文详细介绍了如何利用Xposed框架开发模块,实现抖音App本地数据监控的技术方案。通过Hook关键方法,开发者可以实时获取用户信息、推荐算法参数等核心数据,无需Root设备即可高效调试。文章包含完整的环境配置、代码实现和优化技巧,为移动应用开发与测试提供创新解决方案。

weixin_27015733的博客 385

从“架构师书单”讲开去

【源起】琉璃要我推荐一下给工程师们的各阶段的书单,这件事被我压在手边好些天了已经。然后呢就看见了公司内网中孙坚的一份推荐。其实那份书单的一些信息也是有出处的(或者说有类似介绍的地方),是江南白衣的另一份架构师书单,目前已经“翻新”到2009年版和第3版了:http://calvin.javaeye.com/blog/351007http://calvin.javaeye.com/blo

aimingoo的专栏 2万+

植物GO注释

本文主要是对没有GO term库的植物进行注释。 1、选用AgriGo 进行注释,在agriGO中点击species后,查看与你目标物种相近的物种作为库 2、比如我以甜菜为例 为了找到和GO term对应的ID,先找到PLAZA,进入网站https://bioinformatics.psb.ugent.be/plaza/versions/plaza_v3_di...

weixin_30300225的博客 2227

Camunda流程引擎 Modeler (二)

Camunda Modeler是Camunda官方提供的建模器: 独立安装的建模器([windows、linux、mac]

1312

杀不死的人狼——我读《人月神话》(一)

=====前言=====在这与这段文字之前,我已经阅读过种种关于《人月神话》的文字。评论者既有刘天北这样的美食家,试图在书页中夹点胡椒面以慢慢品味,为了表现食客特有的风格,他的书页都比别人数得仔细。也有marktsen这样的速食者,试图几句话就打发了自己或者读者那漉漉的饥肠。阅读这些文字给我带来的收获是:面对《人月神话》,除了表示五体投地的诚服,你既不能做正面言论(那是多余),也不

aimingoo的专栏 1万+

电机瞬态分析基础(2):理想电机的基本假设和正方向规定

电机瞬态分析基础之理想电机假设条件和正方向规定

weixin_45670943的博客 1145

OSCHINA答读者问之五:小作坊如何实施所谓的软件工程?

我曾经去给OSCHINA做过一期有关“软件工程实践”的有奖高手问答 (奖是给提问者的,哈哈),现在来看,许多问题仍然可读之处,因此整理成文字,以为众赏。 原贴在这里:http://www.oschina.net/question/12_78459 本篇的问题:小作坊如何实施所谓的软件工程?   答: 作坊式的,小公司,或需求变化太频繁等等,都不是不做软件工程的理由。往往的,我们一谈工程就

aimingoo的专栏 9560

YOLOv8改进,YOLOv8添加可变性卷积DCNv2

DCNv2对原始的DCNv1进行了改进,可变形卷积网络的卓越性能源于其适应对象几何变化的能力。通过对其自适应行为的检查,虽然对其神经特征的空间支持比常规的ConvNets更接近于对象结构,但这种支持可能远远超出感兴趣区域,导致特征受到不相关图像内容的影响。为了解决这个问题,我们提出了一种可变形卷积网的重新表述,通过提高建模能力和更强的训练,提高了其专注于相关图像区域的能力。通过更全面地集成网络中的可变形卷积,并引入扩展变形建模范围的调制机制,增强了建模能力。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3606

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

【保姆级教程】YOLOv8_Pose多目标+关键点检测:训练自己的数据集

m0_51579041的博客 1万+

OSCHINA答读者问之四:如何做好团队建设以及提高个人领导力?

我曾经去给OSCHINA做过一期有关“软件工程实践”的有奖高手问答 (奖是给提问者的,哈哈),现在来看,许多问题仍然可读之处,因此整理成文字,以为众赏。 原贴在这里:http://www.oschina.net/question/12_78459   本篇的问题:应该从哪些方面下功夫才能做好团队建设?从哪些方面提高自己的领导力? 答: 1. 修炼自己,服人之口莫若服人之心,你得让

aimingoo的专栏 9549

把个人化的 SQVI 报表变成可维护、可共享、可传输的 ABAP Query:从定位来源到转换落地的完整路线图

本文针对SAP系统中业务用户常用但难以维护的SQVI临时报表问题,提供了一套完整的解决方案。文章首先区分了SQVI(个人临时报表)和ABAP Query(团队可维护报表)的关键差异,重点介绍了如何通过函数模块RSAQ_DECODE_REPORT_NAME反查报表来源。对于SQVI报表,详细说明了定位创建人和转换为团队可维护的ABAP Query的具体步骤,包括Query Area切换、转换操作和后续维护方法。最后总结了常见问题的解决方案,如字段调整、口径固化和生成程序名反查等,为现场实施提供了可直接操作的完

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

不可能解开的谜题

本文为《程序员修炼之道:从小工到专家(评注版)》一书的序。 http://product.dangdang.com/product.aspx?product_id=22531373 该书的这一版次是英文版原版(带原版页码),由学镛(在这里在这里)与我合写的点评,点评是中文。我主要评点内容细节,也就是各章内插入的只言片语,以及后来补写的第七、八两章的全章点评。 以前做过《大道至

aimingoo的专栏 8802

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OSCHINA答读者问之三:架构是否就是把问题域理清楚?软件工程各要素可有比重?

我曾经去给OSCHINA做过一期有关“软件工程实践”的有奖高手问答 (奖是给提问者的,哈哈),现在来看,许多问题仍然可读之处,因此整理成文字,以为众赏。 原贴在这里:http://www.oschina.net/question/12_78459 本篇的问题有两个:架构是否就是把问题域理清楚?软件工程各要素可有比重? 问: 一、关于架构。 我认为架构就是把问题域的方方面面理清楚咯,设

aimingoo的专栏 8712

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

杀不死的人狼——我读《人月神话》(二)

===== 二、哪些是现象,哪些是答案,而哪些才是本质? ===== Brooks在1961年至1964年间,主持与领导了被称为人类从原子能时代进入信息时代标志的IBM/360。十余年后,在1975年,他将历年来所写的有关软件工程和项目管理方面的文章汇集成书,这就是《人月神话》。无疑的,《人月神话》是Brooks十年中对IBM/360与操作系统OS360等项目的不断反思的结果。 而在我看到

aimingoo的专栏 8308

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OSCHINA答读者问之六:杂谈(完结篇)

我曾经去给OSCHINA做过一期有关“软件工程实践”的有奖高手问答 (奖是给提问者的,哈哈),现在来看,许多问题仍然可读之处,因此整理成文字,以为众赏。 原贴在这里:http://www.oschina.net/question/12_78459 本篇的问题:(没有主题,呵呵) 问:我们公司准备进行“敏捷测试”。有没什么建议~! 答:基本上,所有带着“敏捷”字头的,我都很难有建议。

aimingoo的专栏 8159

杀不死的人狼——我读《人月神话》(三)

=====  三、《人月神话》是预言了未来还是控制了未来? ===== 事实是:我们现在的很多工程知识,——无论是从书上看到的,还是从实践中体验到的——大多未曾脱离《人月神话》之所言。 我在开篇中说《人月神话》“是一本可怕的书”。然而我认为真正的可怕之处在于:如今只要论及工程(且不要让人认为是离经叛道),那么所讲述的一定是Brooks的这样的经验以及由此推出的观点,或者在不违背这些经验和观

aimingoo的专栏 7945

又见标题党——怒评《JavaScript核心技术》

很少写书评,尤其是在这样出离愤怒的时候。之所以愤怒,是因为今天看到了《JavaScript核心技术》。看到书名,看到那头犀牛,我的第一冲动就是立即下单买进。因为OReilly、机械工业、核心技术,再加上在JavaScript界中无人不知的那头犀牛,大概已经是品质的极境了。然而毕竟是在优快云的读书区看到这条消息,毕竟还有一个“预读”。但预读中的这份目录却不禁让我疑惑:这会是在讲“

aimingoo的专栏 7466

有源则至清——我读《移山之道》

引子===============大概是因为列在博文的作译者清单里的缘故罢,我常常能在第一时间得到有关新书的消息。这本《移山之道》的消息在《大道至简》出版前我就知道了。当时也是心中忐忑,因为同样是一本言“道”的书,同样以愚公移山为背景,同样讲软件工程……邹欣先生在博客中说这“车”撞得他眼冒金星,其实我又何尝不是如此?哈哈~于是当时便想着:等《移山之道》出版了一定得好好看看,是不是好书不论,评论

aimingoo的专栏 6353

杀不死的人狼——我读《人月神话》(四)

  =====四、没有银弹,或人狼杀不死=====人狼这个动物很奇怪,皮肉坚实还是自疗系的,所以要么砍它不动,要么杀它不死。这种动物如同习得(传说中的)金钟罩功夫,刀枪不入,水火不怕。也如同金钟罩有罩门一样,人狼对银没有免疫,因此如果做一颗银弹就能穿透它,进而杀了它。所以人们总是说一物克一物,大象怕老鼠,总有对付它的法子。但如果你设定了一个自圆已说的悖论,那除了否定

aimingoo的专栏 6288
上一篇: 又见标题党——怒评《JavaScript核心技术》
下一篇: 再议《JavaScript代码优化一例》
aimingoo
博客等级 码龄21年 1755粉丝 213原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值