2010-11-11 47 views
2

我需要匹配簡單的一些包含*和?的簡單glob模式。我想到我可以將輸入模式轉換爲正則表達式 - 唯一的問題是我不熟悉正則表達式足以瞭解替換。如何使用regexp在C/C++中執行glob(Linux)

從本質上講,我需要一個實現:

std::string getRexExpForGlob(const std::string& globPattern); 

注意這些比賽不用於任何與文件系統,所以POSIX水珠不會做。

回答

2

根據您的操作系統,您可能有<fnmatch>int fnmatch(const char* pattern, const char* string, int flags)。這允許針對任意字符串的glob模式,以及一些額外的標誌,以允許超出文件名匹配所需的靈活性。

否則,glob的*?分別等同於正則表達式.*.。 (Globs也可以有[]替代品,但是你說過你沒有)。

+0

此解決方案是最簡單的,謝謝(fnmatch在我的系統上很好)。 – Justicle 2010-11-11 02:01:03

2

*以glob模式相當於.*正則表達式。 ?相當於.。在大多數正則表達式中,.默認情況下與換行符不匹配,所以如果您需要它匹配該字符,請檢查您的庫是如何設置該標誌的。

1

在正則表達式中,.表示任何單個字符。這以全局模式映射到?。類似地,.*表示任何字符序列,其以全局模式映射到*。你應該能夠從中編寫一個可行的功能。