gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:09 25 4
gpt4 key购买 nike

我正在使用 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:]]*?" );

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

关于c++ - 无法弄清楚为什么正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com