gpt4 book ai didi

c++ - 避免正则表达式贪婪

转载 作者:行者123 更新时间:2023-11-28 04:28:10 29 4
gpt4 key购买 nike

基本的正则表达式问题。

默认情况下,正则表达式似乎是贪婪的。例如下面的代码:

#include <regex>
#include <iostream>

int main() {
const std::string t = "*1 abc";
std::smatch match;
std::regex rgxx("\\*(\\d+?)\\s+(.+?)$");
bool matched1 = std::regex_search(t.begin(), t.end(), match, rgxx);
std::cout << "Matched size " << match.size() << std::endl;

for(int i = 0 ; i < match.size(); ++i) {
std::cout << i << " match " << match[i] << std::endl;
}
}

这将产生以下输出:

Matched size 3
**0 match *1 abc**
1 match 1
2 match abc

作为一个普通的正则表达式编写者,我只希望

1 match 1
2 match abc

来了。我认为,由于正则表达式的贪婪,第一场比赛即将到来。如何避免?

最佳答案

来自 std::regex_search : match[0] 不是贪心求值的结果,而是整个匹配的范围。匹配元素 [1, n) 是捕获组。

以下是匹配结果含义的说明:

regex     "hello ([\\w]+)"

string = "Oh, hello John!"
match[0] = "hello John" // matches the whole regex above
match[1] = "John" // the first capture group

关于c++ - 避免正则表达式贪婪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53721986/

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