请帮我正则表达式。我正在学习它。我不需要替换代码。
我正在使用VS2008(C ++)处理wxWidget 2.8.12。我想检查TEST_STRING是否为浮点数。 (-0.1
,0.1
,1
等)。我认为表达本身是正确的,我通过工具检查。我用wxWidget搞错了吗?
wxString tmpStr = TEST_STRING;
wxRegEx reNegativeFloatNum(_("^[-]?[0-9]*\\.?[0-9]+$"));
bool tmp = reNegativeFloatNum.Compile(tmpStr);
tmp = tmp && reNegativeFloatNum.IsValid();
if ( tmp && reNegativeFloatNum.Matches(tmpStr))
{
//Do something
}
else
{
//Do something else
}
我真正的问题是为什么正则表达式不起作用?如果我输入'a' - 'Z',Matches()将返回'true'。谁知道?我只是想学习正则表达式。
答案 0 :(得分:0)
您无需为此任务使用正则表达式。转换数字并测试它以确定它是否转换为负数。
if ( atof( tmpStr.c_str() < 0 ) {
// negative number
} else {
// positive or not a number
}
答案 1 :(得分:0)
正如ravenspoint写的那样,你真的不需要像这样的东西的正则表达式(当然,如果你真的想要,也可以使用它们。)
在wxWidgets中,最简单的方法就是
double num;
if ( tmpStr.ToDouble(&num) ) {
if ( num < 0 )
...
}
//else: it's not a number at all
答案 2 :(得分:0)
由于OP真的想要使用正则表达式,我详细查看了它,原始正则表达式对我来说效果很好。请注意,您不需要在正则表达式字符串周围使用_()
,因为这不是您需要翻译的内容(_
是wxTRANSLATE()
的简短同义词)和{{{ 1}}已被ctor调用。所以这是一个较短的版本:
Compile()
它按预期工作:
#include <wx/init.h>
#include <wx/regex.h>
int main(int argc, char **argv)
{
wxInitializer init;
if ( !init.IsOk() ) {
puts("Failed to initialize wxWidgets.");
return 1;
}
wxRegEx re("^[-]?[0-9]*\\.?[0-9]+$");
return re.Matches(argv[1]);
}
答案 3 :(得分:0)
两种方法都有效:
方法1:
wxRegEx re;
bool tmp = re.Compile(wxT("^[-]?[0-9]*\\.?[0-9]+$"));
if ( tmp && re.Matches(StrToBeTested))
{
//Do sth.
}
方法2:
wxRegEx re(wxT("^[-]?[0-9]*\\.?[0-9]+$"));
if (re.Matches(StrToBeTested))
{
//Do sth.
}
根据VZ的回答,没有必要在方法2中再次编译。它确实有用 我刚刚用wxRegEx :: Compile的参数犯了一个愚蠢的错误。感谢所有回复。