增强特殊字符的正则表达式模式

boost regex pattern for special characters

本文关键字:模式 正则表达式 特殊字符 增强      更新时间:2023-10-16

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

这意味着不仅("[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;

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

我建议做一个集合,排除不会像那样传递的字符例如:

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

我没有使用Boost:regex到目前为止,但我知道一点关于regex。我假设您只希望在至少存在一个"特殊字符"的情况下进行匹配。此外,我假设您只希望字母数字字母有效,其余字母无效。比如"Good String"answers"Bad.String "。请尽量说得更具体一点。

首先,据我所知,只匹配一个具有零个或多个"*"的类将始终返回true。尝试"+"来代替匹配,只有当你至少有一个类的实例。

第二,你可以尝试使用像[^a- za - z0 -9]这样的类,如果有任何不在你的类中的东西,它的结果是true。

对于进一步的阅读,我建议文档(是的,我知道,regex语法是相当地狱):http://www.boost.org/doc/libs/1_53_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html或者是我最喜欢的regex语法http://en.wikipedia.org/wiki/Regular_expression

我希望这对你有帮助!