编写巧妙的正则表达式不仅仅是一种手艺(skill) 而且还是一种艺术(art)。

正则引擎的平衡法则

  • 只匹配期望的文本,排除不期望的文本。
  • 易于控制和理解。
  • 使用NFA引擎时必须保证效率——能够匹配时立即返回匹配结果,不能匹配时尽快报告匹配失败。
阅读全文 »


正则引擎的分类

正则引擎主要分为 3 类:

  1. DFA(符合或不符合 POSIX 标准的都属此类)
  2. 传统型 NFA
  3. POSIX NFA
引擎类型 程序 忽略优先量词(懒惰) 捕获型括号 回溯
DFA awk(大多数版本)、egrep(大多数版本)、flexlex、MySQL、Procmail 不支持 不支持 不支持
传统型 NFA GNU Emacs、Java、grep(大多数版本)、lessmore、.NET 语言、PCRE library、Perl、PHP(所有三套正则库)、Python、Ruby、sed(大多数版本)、vi 支持 支持 支持,但性能差
POSIX NFA mawk、Mortice Kern Systems’utilities、GNU Emacs(明确指定时使用) 不支持 支持 支持,但性能差
DFA/NFA 混合 GNU awk、GNU grep/egrep、Tcl 支持 支持 DFA 支持
  • 判断是否传统型 NFA:是否支持忽略优先量词(懒惰)。使用正则表达式 nfa|nfa not 来匹配字符串 nfa not,如果只匹配了 nfa,这就是传统型 NFA。如果整个 nfa not 都能匹配,则此引擎要么是 POSIXNFA,要么是 DFA。
阅读全文 »

八分 第 80 期 | 剧透的思考练习:言论自由还是道德错误?

Episode Archive

  • 剧透的伦理学基础:功利主义(效用主义)。
  • 功利主义含义:所谓最大善的计算则必须依靠此行为所涉及的每个个体之苦乐感觉的总和,其中每个个体都被视为具相同分量,且快乐与痛苦是能够换算的,痛苦仅是 “负的快乐”。判断一件事的好坏,依据就是其是否增进人类最大的善,即增加人类的总体快乐。
  • 剧透带来的双成伤害:
    1. 剧透减少了观影的悬疑性,破坏了观影过程的乐趣;
    2. 剧透破坏了观影前对影视作品的期待与喜悦。
  • 剧透的言论自由基础:卡尔·波普尔在《开放社会及其敌人》中提出的「宽容悖论」。
  • 宽容悖论:

    无限的宽容必然导致宽容的消失。如果我们把无限的宽容延伸到那些不宽容的人身上,如果我们不准备捍卫宽容社会以抵抗不宽容的冲击,那么宽容将被摧毁,并且我们还将容忍他们。

  • 穆勒认为,除非某个人的言论或行为伤害(肉体或利益受损)而非冒犯(情绪、尊严受损)到一个人,否则其言论或行为不应被任何力量禁止。

  • 剧透是否是对肉体和精神的真实伤害?还是仅仅只是一种冒犯?
  • 剧透与权利的关系:如果剧透者是创作者本人,其是否有权剧透?这一剧透行为是否有合理性?
  • 剧透与历史的关系:历史作品是否可以剧透?
  • 真正伟大的作品不惧怕剧透。类型文学 / 作品是不可被剧透的。
  • 剧透的另一种观赏乐趣:心平气和地感受作品的细节。
  • 互联网的出现为剧透文化带来的改变:电影预告片即是对剧透文化的利用。
  • 希区柯克的《惊魂记》告诫观众请勿剧透,助长了影片本身的神秘性。
阅读全文 »


正则表达式的发展历程

  • 1968 年 Ken Thompson 的文章 Regular Expression Search Algorithm 描述了一种正则表达式编译器,该编译器生成了 IBM7094 的 object 代码。由此也诞生了他的 qed,这种编辑器后来成了 Unix 中 ed 编辑器的基础。

  • ed 有条命令 g/Regular Expression/p,读作 Gjobal Regular Expression,Print(应用正则表达式的全局输出)。这个功能最终成为独立的工具 grep,之后又产生了 egrep(Extended grep)。

    • POSIX(Portable Operating System Interface,可移植操作系统接口)诞生于 1986 年,它是一系列标准,确保操作系统之间的移植性。POSIX 把各种常见的流派分为两大类:
      Basic Regular Expressions(BREs)和 Extended Regular Expressions(EREs)。POSIX 程序必须支持其中的任意一种。

POSIX 正则表达式流派

  • Perl 的特性中值得一提的是,它提供了传统上只有专用工具 sedawk 才提供的正则表达式操作符——这在通用脚本语言中是个首创。正则引擎的代码来自一个早期的项目——Larry 的新闻阅读器 rn(其中的正则表达式代码来自 James Gosling 的 Emacs。(James Gosling 后来去开发他自己的语言 Java,Java 1.4 提供了一个标准的正则表达式包。)

  • 1997 年 Philip Hazel 开发了 PCRE,这是一套兼容 Perl 正则表达式的库,全面仿制 Perl 的正则表达式的语法和语义。其他的开发人员可以把 PCRE 整合到自己的工具和语言中,许多流行的软件都使用了 PCRE,例如 PHPApache 2EximPostfixNmap

    阅读全文 »

原文 How To Secure Your Linux Server In 7 Easy StepsBrian Mutende 发布于 Medium,翻译转载已获作者允许。
为配合博客目录系统显示,对原文章节名略有修改。


大多数服务器经常会被黑客攻击。所以我决定写一篇简短的教程,让读者轻松加固自己的 Linux 服务器。

这并不是一篇完整的安全指南,但是它可以帮你阻断近九成常见的后端攻击,例如暴力破解DDoS

最棒的是,你可以在一两个小时内就完成操作。

准备工作

  1. 你需要一台Linux服务器。
  2. 你需要对命令行有基本的了解。这里提供一份 cheet sheet 供你使用。

如果你已万事俱备,那就开始吧。

阅读全文 »