我需要匹配簡單的一些包含*和?的簡單glob模式。我想到我可以將輸入模式轉換爲正則表達式 - 唯一的問題是我不熟悉正則表達式足以瞭解替換。如何使用regexp在C/C++中執行glob(Linux)
從本質上講,我需要一個實現:
std::string getRexExpForGlob(const std::string& globPattern);
注意這些比賽不用於任何與文件系統,所以POSIX水珠不會做。
我需要匹配簡單的一些包含*和?的簡單glob模式。我想到我可以將輸入模式轉換爲正則表達式 - 唯一的問題是我不熟悉正則表達式足以瞭解替換。如何使用regexp在C/C++中執行glob(Linux)
從本質上講,我需要一個實現:
std::string getRexExpForGlob(const std::string& globPattern);
注意這些比賽不用於任何與文件系統,所以POSIX水珠不會做。
根據您的操作系統,您可能有<fnmatch>
和int fnmatch(const char* pattern, const char* string, int flags)
。這允許針對任意字符串的glob模式,以及一些額外的標誌,以允許超出文件名匹配所需的靈活性。
否則,glob的*
和?
分別等同於正則表達式.*
和.
。 (Globs也可以有[]替代品,但是你說過你沒有)。
*
以glob模式相當於.*
正則表達式。 ?
相當於.
。在大多數正則表達式中,.
默認情況下與換行符不匹配,所以如果您需要它匹配該字符,請檢查您的庫是如何設置該標誌的。
在正則表達式中,.
表示任何單個字符。這以全局模式映射到?
。類似地,.*
表示任何字符序列,其以全局模式映射到*
。你應該能夠從中編寫一個可行的功能。
此解決方案是最簡單的,謝謝(fnmatch在我的系統上很好)。 – Justicle 2010-11-11 02:01:03