gpt4 book ai didi

regex - 使用 C++ RegEx 进行后视的替代方法是什么?

转载 作者:行者123 更新时间:2023-12-04 21:06:50 25 4
gpt4 key购买 nike

我正在使用以下模式:

(?<=<)(?<!>).*?q.*?(?!<)(?=>)

它使用正面和负面的前瞻和后视来匹配文字 q括在匹配的括号中。
std::regex不支持后视。那么什么是好的选择呢?

最佳答案

请注意 (?<=<)(?<!>)等于 (?<=<) (因为在当前位置的左边需要一个 <,所以不能有任何 > )和 (?!<)(?=>)等于 (?=>) (同样的逻辑在这里适用,因为 > 必须紧靠右边,不会有任何 < )。第一.*?不会匹配最短的子串,它会从字面上找到第一个 q后跟任何 0+ 个字符,直到第一个 > .因此,即使在支持后视的引擎中,该模式也几乎不适合您。

我宁愿使用 <([^<>q]*q[^<>]*)>带有捕获组和文字消耗的正则表达式 <>表达式开头/结尾的符号:

std::regex r("<([^<>q]*q[^<>]*)>");
std::string s = "<adqsdq<><abc>5<abq>6<qaz> <hjfffffffk>";
for(std::sregex_iterator i = std::sregex_iterator(s.begin(), s.end(), r);
i != std::sregex_iterator();
++i)
{
std::cout << (*i).str(1) << srd::endl;
}

C++ demo

输出: abqqaz

关于regex - 使用 C++ RegEx 进行后视的替代方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503110/

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