0

有谁知道如何为 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;

我将不胜感激您可以提供的任何帮助

4

2 回答 2

0

到目前为止,我没有使用 Boost:regex,但我对 Regex 有所了解。我假设您仅在至少存在一个“特殊字符”时才想匹配。此外,我假设您只希望字母数字字母有效,其余字母无效。像“Good String”和“\Bad.String)”。请尝试更具体地说明这一点。

首先,据我所知,仅匹配一个具有零个或多个“*”的类将始终返回 true。仅当您至少有一个类实例时,才尝试使用“+”来匹配。

其次,您可以尝试使用像 [^a-zA-Z0-9 ] 这样的类,如果有任何东西不在您的类中,则结果为真。

为了进一步阅读,我建议文档(是的,我知道,正则表达式语法非常糟糕): 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

我希望这有帮助!

于 2013-03-21T13:28:47.580 回答
0

我建议做一个不包括不会像那样通过的字符的集合,例如:

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

于 2013-03-21T14:05:33.500 回答