简单的正则表达式不匹配

时间:2013-10-09 20:41:57

标签: c# c++ regex unit-testing com

我有一个简单的C ++,COM-visible,regex实用程序,它返回true / false,具体取决于它是否找到匹配项。像A [A]这样的表达式(借用单元测试中的方法签名)匹配。一个很好的表达式来匹配Excel范围字符串(A1:Z10)的工作正常。但是像

这样的表达
This is a long sentence.
带或不带忽略大小写的

[A-Za-Z]*将不匹配。我已经尝试过我能想到的变化:\w[A-Z]*(忽略大写集),一个.NET变种\ p ...(有些东西,现在不记得了!)。什么都行不通。有趣的是,我在VS2012中有两个不同的正则表达式测试器插件,他们都说正则表达式在句子上匹配。

/编辑/ 不要认为这会有多大帮助,但这里是C ++代码的可操作部分:

<!-- language: lang-cpp -->
varRegex.ChangeType(VT_BSTR);

    using namespace std::regex_constants;
    wregex regexPredicate((wchar_t*)varRegex.bstrVal, ECMAScript|icase);

    if (varValue.vt == VT_BSTR)
    {
        pRetVal->vt = VT_BOOL;
        pRetVal->boolVal = std::regex_match( static_cast<wchar_t*>(varValue.bstrVal), regexPredicate ) 
            ? VARIANT_TRUE : VARIANT_FALSE;
    }

嗯......我必须使用不正确。

思想?

感谢。

2 个答案:

答案 0 :(得分:2)

对于示例字符串This is a long sentence.,您需要使用量词。

[a-zA-Z\. ]*   matches any character of a-z or A-Z, ' ' and '.' (0 or more times)

以下量词被认可。

*      Match 0 or more times
+      Match 1 or more times
?      Match 1 or 0 times
{n}    Match exactly n times
{n,}   Match at least n times
{n,m}  Match at least n but not more than m times

答案 1 :(得分:0)

  

“这是一个长句。” “[A-ZA-Z]”

你可能意味着“[A-Za-z]”//最后“z”很小