【问题标题】:Simple Regex Doesn't match简单的正则表达式不匹配
【发布时间】:2013-10-09 20:41:56
【问题描述】:

我有一个简单的 C++、COM 可见、正则表达式实用程序,它根据是否找到匹配项返回真/假。 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;
    }

嗯……一定是我用错了。

想法?

谢谢。

【问题讨论】:

  • [A-Za-z] 这个正则表达式匹配所有字母的大小写
  • 您能否在您的问题中添加一些代码,尤其是关于您如何应用正则表达式的代码?

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


【解决方案1】:

对于您的示例字符串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

【讨论】:

  • 真的以为将量词从星号改为加号就可以了,但并不快乐。
  • 可能包括标点符号。 [a-zA-Z\. ]+
【解决方案2】:

“这是一个很长的句子。” “[A-Z-Z]”

你可能是说“[A-Za-z]” //最后一个“z”很小

【讨论】:

  • 是的。错字又来了!