C++11 regex_search和ECMAScript语法出现问题
Issue with C++11 regex_search and ECMAScript syntax
我目前在Ubuntu下使用gcc-4.9,试验C++11库。regex的(默认)ECMAScript语法显然有一些我不理解的地方。
我的代码如下:
#include <iostream>
#include <exception>
#include <regex>
using namespace std;
int main() {
string test_str = "this is text containing teeext! Text! Teeeeeeeeeext! This txt should not be matched, nor this Txt";
string pattern = "([Tt][e]+xt)";
try {
regex r(pattern, regex_constants::ECMAScript);
smatch results;
if (regex_search(test_str, results, r))
{
cout << "Found #" << results.size() << " results!" << endl;
for(unsigned int i = 0; i < results.size(); i++)
{
cout << results[i].str() << endl;
}
}
else
cout << "no match for " << pattern << endl;
} catch (regex_error &e) {
cout << "what: " << e.what() << "; code: " << e.code() << endl;
}
}
我希望正则表达式匹配原始字符串中的"text"、"teeext"、"text"answers"Teeeeeeext";但是输出是:
Found #2 results!
text
text
我已经尝试了几种方法来指定正则表达式,例如"[T|t]e+xt"
和变体,但似乎都不起作用。我做错了什么?
谢谢你抽出时间。
您误解了size()
和[]
对match_results
对象的作用。regex_search
和regex_match
不尽可能多次地应用正则表达式。他们寻找第一个匹配。match_results
对象中的子匹配对应于正则表达式中的各个组(括号子表达式),索引0
对应于整个匹配。
因此,在您的情况下,它在第一场比赛(text
)时停止。该值由整个正则表达式匹配,(因为整个正则表达式是一个捕获组)也由第一个子组匹配。这就是为什么size()
是2
,并且两个子表都返回text
。
相关文章:
- C++:取消引用十六进制值,有点语法问题
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- 语法问题:"char [5] const &"是什么意思?
- C++ std::函数语法问题
- C++.传递给函数.语法问题
- 内联访问说明符出现语法问题
- 无法在语法问题中返回简单函数
- Windows / Intel Compiler / Inline Assembler & GNU 语法问题
- 等级课程语法问题
- 可变模板的模板语法问题
- 使用自定义对象的地图使用MAP?可能是语法问题
- 语法问题
- GLSL语法问题:意外的new_identifier
- C++ 模板方法语法问题
- 从结构实例调用变量语法问题C++
- 一些C++语法问题
- 当一个规则使用BOOST_FUSION_ADAPT_STRUCT时,精神因果报应语法问题
- 在简单的哈希表中解决内存泄漏和语法问题
- 模板的语法问题
- C++ 标头语法问题