最近在討論回應 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 的工具會更適用。
要在windows上面裝一些unix-like工具,推薦:
http://gnuwin32.sourceforge.net/
可以看一下他的套件列表:
http://gnuwin32.sourceforge.net/packages.html
呵呵,gawk, sed都有
fillano 所提供的是有更新,且較完整的unix-like的工具,
讓windows下的使用者,也可用到*nix中常用的工具。
GNU utilities for Win32 可能是gnuwin32 的前身?
到2003年就沒有再維護了,
裡面的工具程式沒有那麼齊全,
但基本的 grep, gawk, sed 也都有,
如果沒有用到複雜到較新版才有功能的話,
這也是可以的選擇。
上述的網址的下載點無效,
可在 http://sourceforge.net/projects/unxutils/files/ 下載。