Строковый литерал не будет иметь конца для выражения регулярного выражения

#c #regex

#c #регулярное выражение

Вопрос:

Я пытаюсь использовать это регулярное выражение

 ^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(.(?!$)|$)){4}$
  

для анализа адресов IPV4

Я попытался поместить его в необработанный строковый литерал:

 std::regex ipv4(R"^((25[0-5]|(2[0-4]|1[0-9]|[1-9]|)[0-9])(.(?!$)|$)){4}$");
  

но я получаю ошибку:

 main.cpp:14:4: error: expected ';' at end of declaration
  }
  

потому что компилятор не может найти конец строкового литерала. Что я делаю не так? Разве я не должен просто помещать вещи внутрь R"" ?

Ответ №1:

Нет, если вы посмотрите на ссылку для строковых литералов, вы увидите, что минимальный необработанный строковый литерал должен быть R"()" .

Вы можете использовать дополнительные разделители между " и ( , которые должны соответствовать разделителям между ) и " . например R"~~(hello world)~~" , содержит строковый литерал «hello world».

Комментарии:

1. Лучшая ссылка в сети.