【发布时间】:2021-09-13 13:34:29
【问题描述】:
我在 CMake 中有一个字符串,我以某种方式在变量 MYVAR 中得到了它。我想检查该字符串是否为整数 - 可能带有空格。我有一个丑陋的方法:
string(REGEX MATCH "^[ \t\r\n]*[0-9]+[ \t\r\n]*$" MYVAR_PARSED "${MYVAR}")
if ("${MYVAR_PARSED}" STREQUAL "")
message(FATAL_ERROR "Oh no!" )
endif()
# Now I can work with MYVAR as a number
有没有更好的方法?或者 - 我应该把它包装在一个函数中吗?
注意:我正在使用 here 中记录的 CMake 正则表达式语法。
【问题讨论】:
-
“我有一个丑陋的方法” - 你将“丑陋”命名为一个只包含简单的
*、+和?的正则表达式?在这种情况下,什么是 non-ugly 正则表达式?匹配精确字符串的正则表达式?或者您想使用正则表达式检查字符串 without 吗?好吧,您可以遍历字符串字符并应用简单的状态机,但我认为给定的方式并不比正则表达式更简单。不知道你想从我们这里得到什么。 -
@Tsyvarev:非丑陋的应该是:
if (IS_NUMBER "${MYVAR})或类似的东西......而且,即使我使用正则表达式,也不必使用辅助变量。 -
"不丑的应该是:
if (IS_NUMBER "${MYVAR})" - 你真的希望 CMake 能够检查很少使用的类型(使用E的指数小数)?在您提出问题之前,我什至没有考虑过这种表示形式。 “另外,不必使用辅助变量,即使我确实使用了正则表达式。” -if(MYVAR MATCHES "<your-regex>")呢?这是 CMake 中完全有效的检查。 -
@Tsyvarev:你的观点很有道理。所以,让我们忘记指数。见编辑。
标签: regex cmake numbers idioms string-parsing