有谁知道如何在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;
我将非常感谢您提供的任何帮助
答案 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)
我建议做一个集合,不包括那些不会传递的字符,例如:
[^\\!\\?]+
,然后测试是否匹配