如何在CMake中获得正则表达式的组匹配?

时间:2014-04-24 16:41:38

标签: regex 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在网络中使用的正则表达式处理器的局限性。谁知道更多? (在CMake FAQ

中有一些关于此的内容

感谢您的支持!

1 个答案:

答案 0 :(得分:3)

CMake的正则表达式相对有限。查看RegularExpression.cxx中的static char* regatom (int *flagp)方法。一个\\ 表示下一个字符被转义(按字面处理)。看起来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