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

Can't figure out why regex is not workng

本文关键字:正则表达式 不起作用 为什么 弄清楚      更新时间:2023-10-16

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

word1 word2
some
other
text

我使用以下正则表达式:

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

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

当对以下字符串进行匹配检查时:

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

;

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

wstring _s(L ' ' ' ' вотn
частица разг。n
1) Употр.приуказанииналицо,предмет,находящиесяпоблизости。 n
2)Употр。приуказаниинапоследующийисчерпывающийответ。 n
4)Употр。при сопоставлении * содержанием предшествующегопредложения。n
5) Употр。при противопоставлении частей сложногопредложения。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;
}

我通过将正则表达式重新表述如下来解决这个特殊问题:

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

我不确定这个问题是由不正确的regex语法引起的,还是regex实现中的错误…