wxWidget,正则表达式,wxRegEx,检查浮点数

时间:2012-08-21 10:23:34

标签: regex wxwidgets

请帮我正则表达式。我正在学习它。我不需要替换代码。

我正在使用VS2008(C ++)处理wxWidget 2.8.12。我想检查TEST_STRING是否为浮点数。 (-0.10.11等)。我认为表达本身是正确的,我通过工具检查。我用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'。谁知道?我只是想学习正则表达式。

4 个答案:

答案 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的参数犯了一个愚蠢的错误。感谢所有回复。