提升特殊字符的正则表达式

时间:2013-03-21 12:57:50

标签: c++ regex boost

有谁知道如何在c ++中为特殊字符制作提升模式?

这不仅意味着("[A-Za-z0-9 \\s]*")

_ + - \ ) \\ ( . | ]等也是如此,例如字符串:

"hello world \\has (special.characters) + defined_with[boost]"有效

"!hello world \\has (special.characters) + defined_with[boost]"无效

更具体,类似这样的事情:

string input;

getline(cin,input);

boost::regex pattern1 ("[a-zA-Z0-9 \\s \\_ \\+ \\- \\\ \\) \\\\ \\( \\. \\| ]*");

if (!regex_match (input, pattern1))
    {
    cout << "invalid input" << endl;
    }
    else
        cout << input << " - is valid" << endl;

我将非常感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:0)

到目前为止我没有使用Boost:正则表达式,但我对Regex有所了解。 我假设你只想在至少有一个“特殊字符”存在的情况下才能匹配。 此外,我假设您只希望字母数字字母有效,其余字母无效。 喜欢“Good String”和“\ Bad.String”“。请尝试更具体地说明这一点。

据我所知,首先只匹配一个零或多个“*”的类将始终返回true。只有在您的班级至少有一个实例时才尝试“+”匹配。

其次,您可以尝试使用类似[^ a-zA-Z0-9]的类,如果您的类中没有任何内容,则会生成true。

为了进一步阅读,我建议使用文档(是的,我知道,正则表达式的语法非常糟糕):http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html 或者我最喜欢的正则表达式语法 http://en.wikipedia.org/wiki/Regular_expression

我希望这有帮助!

答案 1 :(得分:0)

我建议做一个集合,不包括那些不会传递的字符,例如:

[^\\!\\?]+,然后测试是否匹配