boost :: regex_match给出的结果与许多在线正则表达式测试器不同

时间:2013-11-07 13:59:11

标签: c++ regex boost boost-regex

我想匹配输入字段中给出的字符串。

A sample data could be "hello" -> returns true 
or "\"" -> returns true 
or "this is a string" -> returns true 
but """ should not be recognized as a string and should return false when checked by the regexp.

我正在初始化一个boost正则表达式解析器,如下所示:

    std::string myString = "\"\"\"";
    boost::smatch match;
    boost::regex regExpString3("[\"']((:?[^\"']|\\\")+?)[\"']");
    bool statusString3 = boost::regex_match(myString, match, regExpString3);

regex_match不应该匹配,但不幸的是它匹配...

我检查了几个在线reggex测试器:我的正则表达式不匹配(如预期的那样)。

任何想法,如果这可能是一个提升的错误或我做错了什么?

Debuggex Demo: Click me to verify ("[\"']((:?[^\"']|\\")+?)[\"']"

由于

2 个答案:

答案 0 :(得分:1)

尝试以下表达式:

([\\"'])(?:[^\\"]|\\\\")+\\1

Regex101 Demo

答案 1 :(得分:0)

对于这个简单的检查,正则表达式是过度的。只需检查字符串是否有开头的引号,然后搜索下面没有反斜杠的引号。如果第二个引号不在末尾,则字符串的格式不正确。