2012-12-22 22 views
5

爲什麼你必須在他們的正則表達式引擎中轉義一些元字符,而不是其他人?例如:在vim的正則表達式引擎中,爲什麼有些元字符會轉義,有些不是?

/foo[1-9]* 

按預期工作,但正則表達式

foo[1-9]+ 

必須表示爲

/foo[1-9]\+ 

在vim。有人知道嗎?

+1

我不能告訴你爲什麼,但[這裏是一個列表](http://vimregex.com/#metacharacters),如果你需要它逃脫哪些。我想盡管這是某種向後兼容的東西。在開始的時候,只有少數元字符被支持,其他的都是文字。然後他們添加了其他元字符,但仍然希望舊模式(可能包括'+作爲文字)來工作。所以所有新的都必須逃脫。但這只是一個瘋狂的猜測。 –

+0

與新的正則表達式元字符的向後可比性是有道理的。我很好奇,爲什麼他們不只是強制用戶遵循正則表達式後得到相當標準化,如果是這樣的話。 感謝您的輸入,雖然! – Rhyok

回答

22

這是因爲vim(實際上是vi)早在Perl之前就已經創建了自己的正則表達式。甚至POSIX BRE和ERE在vim之後來到了wikipedia。他們仍然保持自己的風格,所以它是完全不同的。

爲了使答案更具資源性,此處引用了ed's wiki

編輯原文爲PDP-二十零分之一十一彙編在1971年由Ken Thompson。 ed的許多特徵來自他的母校加州大學伯克利分校3湯普森對qed非常熟悉,並已在CTSS和Multics系統上重新實現。 他的qed版本是第一個實現正則表達式雖然正則表達式是ed的一部分,但它們的實現比qed中的要少得多。

版的各個方面繼續影響前這反過來又催生了六。非交互式Unix命令grep的靈感來自於qed和later ed的常見特殊用途,其中命令g/re/p表示全局搜索正則表達式re並打印包含它的行。 Unix流編輯器sed實現了很多qed的腳本功能,這些功能在Unix上不受支持。反過來,sed影響了編程語言AWK的設計 - 這啓發了Perl的各個方面。

這兩段有很多信息!我希望我能大膽一點。一些亮點,

  • 肯·湯普森寫道:ed在1971年ed竟是qed一個reimplentation。
  • Ken在他的qed版本中增加了正則表達式,它實際上是ed
  • 通過ed的啓發,在1976年威廉·喬伊(被稱爲比爾·喬伊)寫道:exwikipedia
  • 比爾·喬伊在1976年寫道:vi作爲視覺模式爲線編輯器中調用exwikipedia
  • grep的靈感通過特殊用途qed及更高版本ed
  • sed被實現爲許多未由編輯在Unix
  • sed支持QED的腳本功能影響的awk設計。

因此vi正則表達式在ed這是寫於1971年。它早在任何其他正則表達式的味道。

+0

啊,我明白了。呵呵。我一直認爲POSIX ERE是正則表達式的硬性和快速標準,直到今天才知道它是以不同的方式出現的。它看起來像是像[this](http://www.autohotkey.com/docs/misc/RegEx-QuickRef.htm)這樣的頁面,它應該更合適地以一個大的前綴「這個指南適用於POSIX ERE REGULAR EXPRESSIONS只要。」謝謝你的答案! – Rhyok

+0

更新我的答案一點。看到你會得到很多想法的時間表。 –

+1

偉大的歷史概述;謝謝! –

相關問題