Что означает «\ K» в этом регулярном выражении?

Вы могли бы работать с ленивой инициализацией, тем не менее, это держать unique_ptr для Reader в MyClass и создавать его с новым. Таким образом, вам даже не нужен флаг has_reader, но вы можете просто увидеть, является ли ваш unique_ptr исходным или нет.

#include <iostream>
#include <memory>
using namespace std;

class MyOtherClass
{
public:
    MyOtherClass()
    {
        throw std::runtime_error("not working");
    }
};

class MyClass
{
public:
    typedef std::unique_ptr<MyOtherClass> MyOtherClassPtr;

    MyClass()
    {
        try
        {
            other = std::make_unique<MyOtherClass>();
        }
        catch(...)
        {
            cout << "initialization failed." << endl;
        }

        cout << "other is initialized: " << (other ? "yes" : "no");
    }

private:
    std::unique_ptr<MyOtherClass> other;
};

int main()
{
    MyClass c;

    return 0;
}

Конечно, есть также решения без каких-либо исключений, но я предположил, что это является обязательным условием в вашей настройке.

24
задан Maroun 11 April 2018 в 07:16
поделиться

1 ответ

Так как не все разновидности регулярных выражений поддерживают внешний вид, Perl представил \K. В общем, когда у вас есть:

a\Kb

Когда «b» соответствует, \K говорит двигателю сделать вид, что попытка совпадения началась в этой позиции.

В вашем примере вы хотите сделать вид, что попытка сопоставления началась с того, что появляется после текста «access_token»: «.

Этот пример лучше продемонстрирует использование \K:

~$ echo 'hello world' | grep -oP 'hello \K(world)'
world
~$ echo 'hello world' | grep -oP 'hello (world)'
hello world
48
ответ дан Maroun 11 April 2018 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: