Почему std :: regex_match не преобразует параметр const char [] в std :: string [duplicate]

Допустим, у вас есть путь с файлом в этом формате:

  /dirA/dirB/dirC/filename.file  

Теперь вы только хотите путь, который включает четыре "/". Тип

  $ echo "/dirA/dirB/dirC/filename.file" |  cut -f1-4 -d "/"  

, и ваш выход будет

  / dirA / dirB / dirC  

Преимущество использования разреза заключается в том, что вы также можете вырезать директорию uppest, а также файл (в этом примере), поэтому, если вы наберете

  $ echo "/ dirA / dirB  /dirC/filename.file "|  cut -f1-3 -d "/"  

ваш выход будет

  / dirA / dirB  

Хотя вы можете сделать то же самое с другой стороны строки, в этом случае это не будет иметь особого смысла при вводе

  $ echo "/dirA/dirB/dirC/filename.file"  |  cut -f2-4 -d "/"  

приводит к

  dirA / dirB / dirC  

In в некоторых других случаях может оказаться полезным и последний случай. Имейте в виду, что в начале последнего вывода нет «/».

6
задан Stéphane 19 January 2015 в 07:25
поделиться

1 ответ

Ошибка вашего кода заключается в том, что вы используете неправильный тип match_results . Предполагается, что smatch используется, когда у вас есть объект std::string, и вы передаете std::string::iterator s функции regex. Когда вы используете raw char const * s, используйте cmatch.

Измените

std::smatch what;

на

std::cmatch what;

Live demo

8
ответ дан Praetorian 16 August 2018 в 04:16
поделиться
Другие вопросы по тегам:

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