2014-04-24 79 views
6

讓我們看看下面的說明示例。如何在CMake中獲得正則表達式的組匹配?

set(TEXT "ab,cc,df,gg") 
string(REGEX MATCHALL "((.)\\2)" RESULT "${TEXT}") 
message("Result: ${RESULT}") 

# Expected: Result: cc;gg 
# Actual: Result: 

將預期結果與regex101進行比較。

有沒有人知道如何在上面的例子中正確檢索匹配組1? CMake可以嗎?

我無法找到CMake在Web中使用的正則表達式處理器的侷限性。誰知道更多? (在CMake FAQ中寫了一些關於此的內容)

感謝您的支持!

回答

3

CMake的正則表達式相對有限。請看RegularExpression.cxx中的static char* regatom (int *flagp)方法。 A \\ 指示下一個字符被轉義(按照字面處理)。看起來CMake正則表達式中沒有可能的後向引用。

作爲解決方法,您可以使用execute_process調用shell命令。

set(TEXT "ab,cc,df,gg") 
message("TEXT: ${TEXT}") 

execute_process(
    COMMAND echo ${TEXT} 
    COMMAND sed "s/.*\\(\\(.\\)\\2\\).*/\\1/g" 
    OUTPUT_VARIABLE RESULT OUTPUT_STRIP_TRAILING_WHITESPACE 
    ) 

message("RESULT: ${RESULT}") 

這將產生:

TEXT: ab,cc,df,gg 
RESULT: gg 

你將不得不調整自己的正則表達式就從給定字符串產生cc;gg

+0

但是,這是不可移植到Windows – Joakim

相關問題