簡體   English   中英

如果 NFA 和 DFA 是等價的,為什么我們會有兩個用於正則表達式的引擎?

[英]If NFA and DFA were equivalent, why would we have two engines for regex?

掌握正則表達式 3e

因此,從廣義上講,正則表達式引擎分為三種類型:

  • DFA(POSIX 與否 - 類似)
  • 傳統 NFA(最常見:Perl、.NET、PHP、Java、Python、..)
  • POSIX NFA

計算理論:形式語言、自動機和復雜性

對於每個 NFA,都有一個 DFA 接受完全相同的語言。

我可以說 NFA 和 DFA 是一回事嗎? 或者即使它們識別模式的能力是相同的,但它們在某些方面仍然不同?

你缺少兩件事:

  1. “傳統 NFA”實現實際上包括超出 NFA 的嚴格計算機科學定義的能力。

  2. 性能特征是一件需要關心的事情,即使給出了涵蓋相同答案的兩個實現。

最終效果是回溯實現(我更喜歡這個名字而不是“傳統 NFA”)比 DFA 實現更具表現力,因為它們可以匹配像(\\w{3,})\\1這樣的正則表達式,它匹配三個或更多單詞重復兩次的字符(DFA 無法匹配的內容)。 同時,DFA 實現的輸入長度保證為 O(n),但很容易編寫具有 O(n^2) 或更差行為的正則表達式,當呈現出與它們不匹配的字符串時。 (見https://swtch.com/~rsc/regexp/regexp1.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM