有关 Regular Expression 正则表达式 的粗浅资源介绍

最近在讨论回应 ebag 的
关于支援万用字元的文字编辑器
关于perl的语法
是有关 regular expression 的议题。

在此把相关的粗浅了解做个介绍。
regular expression 被翻成:
正则表示式、正规表示法、常规表示式、字串样版,
没有太同一的翻法。在此以 regex 来简称。

ebag提到:
其实我主要研究是印学与书学方面的人文科学,我可能会努力学这些软体,但若想推广这样的方法,会有很大的困难。
一般人很难像我一样,又喜欢作造形艺术研究又会尝试着「程式的应用」,所以我希望能够有一种简单且易学的且普遍软体,能够处理我们研究中会面临到的一些计算,或者寻找取代的事务。

从您篆来撰去网站所看到的,
真的是少见的有趣主题。

您可以从图形界面的编辑器,
发现到 perl语法搜寻与取代的应用,
可能是慢慢发现到现有常见的编辑器的功能,
愈来愈不够您使用。

其中您提到「一些计算,或者寻找取代的事务」,
是您目前觉得帮助您发展解决能力的方向;
这个议题应就是 Regular Expression(简称 regex);
相对于 九九乘法及各运算符号 是处理数字的工具,
regex 是处理 文字符号的 Search Pattern(搜寻样式)、Pattern Match(样式比对)的工具。
而这 regex 在图形界面编辑器 像 EmEditor、Notepad++ 所发挥的功能有限,
对于一般的文字编辑使用,大致上是够用。
但要做一些较複杂而大量处理时,
就要看一下哪些软体、工具能更灵活地应用 regex 来处理。

洪朝贵的 一辈子受用的 Regular Expressions -- 兼谈另类的电脑学习态度,
是蛮好的 regex 的推广文,其中有新版的议义也不错,
但里面的例子直接用 Perl,且用命令列、一行指令来执行示範,
对初学者还是有点辛苦。
新版的讲义 字串样版 Regexp: 兼谈长线学习投资,
及上述的旧版讲义,可先浏览其概念,
一时弄不清楚语法没关係,
可先从其他资料入门后,
以后再回来看一下这边语法所要表达的。

我自己并不是资讯或工科的背景,
而是也属人文的图书馆系,
当时我也忘了是什么原因,
为了想解决这样的问题:
抓出目录里的一堆HTML档的title,
就自行在天龙买了本 sed & awk 来摸索,
虽然还是很多搞不大清楚,
但基本的 regex 的了解,
就够基本处理的使用。
比方说,怎么把一个文字档中的所有「空行」去掉?
我也很好奇用这问题问资讯科系的同学,
回答是:自己写程式来去掉所有空行。
我也蛮讶异,现成的工具就可以马上解决,
何必要从头做轮子来解决问题?
如今回想,在比较传统的程式语言的教本中,
大部份难见到 regex 的议题;
较新的程式语言,
就比较会把 regex 当一回事。
写有关网页程式的,
比较会用到 regex,
写 非网页程式的,
用 regex 的机会应是不多。
(自己的推测,没有考证根据)

我想说的是,要处理「文字议题」的工作,
基本上并不需要「写程式」来解决问题,
只要用这些现成的 软体或工具,
懂得这些 pattern、样式的语法,
来做套用、比对、处理;
除非是要同时处理大量批次执行,
才需要比较简单的程式语言的 script 来跑一下,
或者需要做成 web 界面来执行,
才比较需要所谓的写程式。

现在有关 regex 的资料多而广泛,
鸟哥的 第十二章、正规表示法与文件格式化处理
是相当不错的入门文件,
把 *nix 上最常见的 grep, sed, awk 的基本使用,
具体而实用的範例介绍。

专讲 regex 的书现在也有好多本,
(在 amazon 找 regular expression,看一下结果)
Mastering Regular Expressions, Third Edition
讲得具体而深入,也比较了不同工具上,regex 的差异。

而 PCRE - Perl Compatible Regular Expressions
是在 perl 用的 regex 的语法,
更能发挥 regex 的功用或能力,
所以有些软体,例如像您所用的 EmEditor,
就把 PCRE 的表达式,做为其 样式比对 的一种依据。

而在一般作业系统的环境下,
常见的万用字元,
大概算是 POSIX Basic Regular Expressions 的简化功能。

这个网站 http://www.regular-expressions.info/ 有很好的 regex 的资源。
在该网站也有一些 windows 上的 regex 工具介绍,
也可以在 windows 上装 Unix-Like 的工具,
或者在虚拟机器随便装个linux,
或用linux的live光碟跑,
就有非常好的 regex 相关的内建工具。

较会从处理文字议题者,
regex 是方便有弹性的工具,
但若要处理 HTML, DOM, XML等 tag 语言,
用这 regex 就太麻烦而琐碎些,
而需要用具处理 DOM 的工具会更适用。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章