2010-03-05 74 views
3

我在ASP.NET/C#寫一個CMS,我需要處理這樣的事情,每一個頁面請求:ANTLR還是正則表達式?

<html> 
<head> 
    <title>[Title]</title> 
</head> 
<body> 
    <form action="[Action]" method="get"> 
     [TextBox Name="Email", Background=Red] 
     [Button Type="Submit"] 
    </form> 
</body> 
</html> 

和替換過程中的[...]。

我的問題是我應該如何使用ANTLR或正則表達式來實現它?什麼會更快?請注意,如果我使用ANTLR實現它,我認爲我需要實現XML,並插入[..]。

我將需要實現參數等

編輯:請注意,我正則表達式甚至可以像這樣的事情:

public override string ToString() 
{ 
    return Regex.Replace(Input, @"\[ 
            \s*(?<name>\w+)\s* 
            (?<parameter> 
             [\s,]* 
              (?<paramName>\w+) 
              \s* 
              = 
              \s* 
              (
               (?<paramValue>\w+) 
               | 
               (""(?<paramValue>[^""]*)"") 
              ) 
            )* 
           \]", (match) => 
            { 
             ... 
            }, RegexOptions.IgnorePatternWhitespace); 
}   
+0

我承認它......我從來沒有聽說過ANTLR ......更不用說知道哪個更好用了。 Googlefoo的時間。 – Nick 2010-03-05 14:23:31

+0

ANTLR是一個解析器/詞法分析器/語法工具包。它用於生成可以分析其他文本來源並提取或翻譯數據的源文件。 它通常用於開發編譯器等。 – Pindatjuh 2010-03-05 14:27:57

回答

4

正確的工具是正確的工具RegEx或ANTLR,甚至完全是其他東西,應該嚴重依賴於你的要求。 「使用什麼工具」問題的最佳答案不應該主要基於性能,而是適合工作的正確工具

RegEx是一個文本搜索工具。如果你所需要做的就是從琴絃中拉出琴絃,那麼它往往是選擇的重點。您可能需要一個工具來幫助您構建RegEx。我建議Expresso,但有很多選擇。

ANTLR是一個編譯器生成器。如果您需要錯誤消息和解析操作或編譯器隨附的任何複雜事情,那麼這是一個不錯的選擇。

它看起來像你正在做的是XML搜索/替換,你有沒有考慮過XPath?這將是我的建議。

爲這份工作選擇正確的工具絕對重要,應該在開發之前進行研究和思考。在任何情況下,在做出任何決定之前,充分了解計劃要求非常重要。你有這個項目的規範嗎?如果不是這樣,花時間想出一個可以節省你所有的時間,一個糟糕的工具選擇可能會讓你付出代價。

希望有幫助!

1

關於ANTLR的性能與正則表達式取決於在C#中實現RegEx。我從經驗中知道,ANTLR足夠快。

在ANTLR中,您可以忽略某些內容,如XML。您也可以查找[],然後繼續處理。

RegEx和ANTLR都支持你的參數類型(「等」,我不知道)。

在開發速度方面:對於這樣的情況,RegEx稍快。您可以使用在線工具開發RegEx並在編輯RegEx時查看捕獲組。 (谷歌@regex gskinner

然後ANTLR完美支持「錯誤消息」:它們顯示行/列號和錯誤。 RegEx沒有這種支持。

RegEx的一般方法是:創建一個「全局掃描」RegEx,它將在您的內容中找到正確的[ ...... ]組。然後讓「...」被一個組捕獲,然後爲這個較小的內容(基於等號和逗號分割內容)應用另一個RegEx。通過這種方式,您可以獲得最佳運行時性能,並且很容易開發。

+0

請在我的問題中看看我的正則表達式 - 你認爲它會比這個案例中最厲害的ANTLR腳本更快嗎? – 2010-03-05 14:29:17

+0

您的RegEx問題比一般的ANTLR實施要慢,這樣做也是如此。雖然,ANTLR很難學,很難正確實施。因此,當你願意花大量時間學習ANTLR的語法格式時,它會稍微快一點。您還可以優化此RegEx:使用一個RegEx獲取'[]'之間的所有內容,然後遍歷這些來解析它們的參數。這樣做更快,因爲RegEx更小(這是使用性能和RegEx時的經驗法則)。 – Pindatjuh 2010-03-05 14:32:52

+0

好的,我會用ANTLR來實現它。我不在乎開發時間+我知道一點ANTLR。謝謝!無論如何,我仍然在尋找更多意見。如果有同樣的情況,我會接受另一個明天。 – 2010-03-05 14:36:57

0

如果你正在解析的語言是經常然後正則表達式肯定是一個選項。如果不是那麼ANTLR可能是你唯一的選擇。如果我正確理解這些問題,XML不是經常性的。

相關問題