无法弄清楚为什么正则表达式不起作用

时间:2014-07-17 13:50:16

标签: c++ regex

我正在使用c ++正则表达式来匹配一个字符串,该字符串以两个由空格和换行符分隔的单词开头,并包含更多带有多个新行字符的文本。像这样:

word1 word2
some
other
text

我正在使用以下正则表达式:

wregex rCompound( L"^[а-я-]+ [а-я-]+[\\r\\n](.|\\s)*?" );

aя是俄语字母表中的第一个和最后一个小写字母。

在以下字符串上检查匹配时:

  

wstring _s(L“авот\ n \\частицаразг。\ n \\ 1)Употр.при   указанииналицо,предмет,находящиесяпоблизости。\ n \\ n2)   Употр.приуказаниинапоследующийисчерпывающийответ。\ n \ n3)   Употр.приусилениипредикативнойчастиприответенавопрос。\ n \
  4)Употр.присопоставленииссодержаниемпредшествующего   предложения。\ n \\ n)Употр.припротивопоставлениичастейсложного   предложения。\ n \¢6)Употр.припереходекдругоймысли,кдругой   темеразговора。“);

发生堆栈溢出。但是当在相同的字符串上检查匹配,但删除了与“3”相关的部分时 - 正则表达式正常工作:

  

wstring _s(L“авот\ n \\частицаразг。\ n \\ 1)Употр.при   указанииналицо,предмет,находящиесяпоблизости。\ n \\ n2)   Употр.приуказаниинапоследующийисчерпывающийответ。\ n \

  4)Употр.присопоставленииссодержаниемпредшествующего   предложения。\ n \\ n)Употр.припротивопоставлениичастейсложного   предложения。\ n \¢6)Употр.припереходекдругоймысли,кдругой   темеразговора。“);

c ++正则表达式实现属于VS 2013.这里有什么问题?

更新:

匹配检查代码:

bool _b = regex_match( _s, rCompound );

更新2:

以下是包含测试项目的代码:

#include "stdafx.h"
#include <regex>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    wregex rCompound( L"^[а-я-]+ [а-я-]+[\\r\\n](.|\\s)*?" );

    wstring _s( L"а вот\n\
  частица разг.\n\
  1) Употр.при указании на лицо, предмет, находящиеся поблизости.\n\
  2) Употр.при указании на последующий исчерпывающий ответ.\n\
  3) Употр.при усилении предикативной части при ответе на вопрос.\n\
  4) Употр.при сопоставлении с содержанием предшествующего предложения.\n\
  5) Употр.при противопоставлении частей сложного предложения.\n\
  6) Употр.при переходе к другой мысли, к другой теме разговора." );

    bool _b = regex_match( _s, rCompound );
    return 0;
}

1 个答案:

答案 0 :(得分:0)

我通过重写正则表达式解决了这个特殊问题,如下所示:

wregex rCompound( L"^[а-я-]+ [а-я-]+[\\r\\n]*[[:cntrl:][:graph:][:space:]]*?" );

我不确定这个问题是否是由不正确的正则表达式语法引起的,或者这是正则表达式实现中的错误......