2013-07-06 127 views
1

我正在面對一個程序中的優化問題,該程序會搜索路徑與給定正則表達式(PCRE)匹配的文件。典型的表現形式可能是:可以填充字符串以匹配正則表達式嗎?

^C:\test\(a|b)\foo\bar 
^C:\test\[^\\]+\foo 
^C:\test\.*\foo 

眼下實施檢測不變前綴路徑(「C:\測試\」),只枚舉該目錄上的所有路徑名應用正則表達式。

查看第一個示例,在C:\ test \中可能存在一個包含一百萬個文件的文件夾「c」。這些都不可能匹配正則表達式,但仍然列舉出來。因此,在枚舉目錄之前,我想檢查它是否完全可能將某些內容附加到路徑中,以便它匹配正則表達式。

一般來說:是否可以決定(有效),給定的字符串是否可以與至少一個後綴連接以匹配給定的正則表達式?

很明顯像第三個例子這樣的例子是不可能優化的,但是在許多其他情況下,這會節省大量的執行時間。

任何想法?

回答

3

您是否考慮過在路徑分隔符上分割正則表達式,並僅應用適用於當前搜索深度的正則表達式部分?這似乎是一種更有效的處理方式。

+1

我同意@tvanfosson;您應該在下降時檢查目錄條目以防止不必要的目錄列表。因此,例如,在'C:\ test'中,您只能檢查*該目錄的子項。如果任何匹配是子目錄,則可以下載到它們中,然後在其子級上運行下一個正則表達式,依此類推。 –