2012-11-05 60 views
0

我有一個數據庫,這裏有一些我需要應用到一串字符串的規則,它們是可以在字符串中出現的表達式。他們都表達了類似字符串中的匹配表達式

(word1 AND word2) OR (word3) 

我不能硬編碼的(因爲它們可以在數據庫中更改),所以我想到了編程轉向那些表現爲正則表達式模式。

有沒有人做過這樣的任務,或有一個想法如何做到這一點的最佳方式? 我並不確定如何處理更復雜的表達式,如何將它們分開等等。

編輯:我在VisualStudio/.NET中使用C#。

的數據是基本目錄的路徑,客戶希望得到他們的文件組織起來,所以我有字符串的路徑,在DB的表情看起來是這樣:

(office OR headquarter) AND (official OR confidential) 

因此,如果該文件的目錄路徑包含辦公和保密的,它應該匹配。

希望這可以使它更清晰。

EDIT2:

下面有一些虛擬的例子:

的路徑可能類似於:

c:\documents\official\johnmeyer\court\out\letter.doc 
c:\documents\internal\appointments\court\in\september.doc 
c:\documents\official\stevemiller\meeting\in\letter.doc 

而像表達式:

(meyer or miller) AND (court OR jail) 

所以這個表達式將匹配第一個路徑/文件,但不是第二個和第三個。

+0

哪種語言,你將如何使用表達式? – kjana83

+0

你能提供幾行實際的數據和你想要的正則表達式模式匹配嗎? – OmegaMan

+0

看我的編輯:) – FWeigl

回答

1

沒有回答,只是一個很好的提示:

表達你必須是由括號構建實際的樹木。您需要一個堆棧機將文本解析爲(二進制)樹結構,其中每個節點是ANDOR元素,樹葉是單詞。 然後,您可以使用深度優先搜索並根據需要在讀取子樹之前/之後添加前綴和後綴數據,以任意語言構建正則表達式。

考慮具有方法GenerateExpression(StringBuilder result)abstract class TreeNode。 每個實際的TreeNode項目將是CombinationTreeNode(使用CombinationMode和/或)或SearchTextTreeNode(使用SearchText屬性)。

GenerateExpression(StringBuilder的結果)爲CombinationTreeNode看起來就像是相似的:

result.Append("("); 
rightSubTree.GenerateExpression(result); 
result.Append(") " + this.CombinationMode.ToString() + " ("); 
rightSubTree.GenerateExpression(result); 
result.Append(")"); 

GenerateExpression(StringBuilder的結果)爲SearchTextTreeNode要容易得多:

result.Append(this.SearchText); 

當然,你的代碼會產生正則表達式而不是輸入文本,就像我的做法一樣。

相關問題