【问题标题】:boost regex pattern for special characters提升特殊字符的正则表达式模式
【发布时间】:2013-03-21 12:57:49
【问题描述】:

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

如果您能提供任何帮助,我将不胜感激

【问题讨论】:

  • 将它们添加到列表中,但用反斜杠转义它们。我不知道是否有“特殊字符”的字符组,但我不这么认为。
  • 会尝试一下,谢谢
  • 这个问题很不清楚。您可以发布您想要使用的这些正则表达式之一的示例吗?
  • 你确定你需要正则表达式中的所有空格字符吗? (我已经知道答案了)
  • 是的,我不需要这些空格字符,你是对的。我只是不确定如果 "\\\ 和 \\\\" 之间没有空格字符会发生什么。

标签: c++ regex boost


【解决方案1】:

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

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

【讨论】:

  • 我现在会接受这个解决方案,再次感谢 Romain。
【解决方案2】:

到目前为止,我没有使用过 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

我希望这会有所帮助!

【讨论】:

  • 感谢 Philipp 为我提供更多信息。该文档对我也非常有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-28
  • 2018-06-13
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多