C ++ проблемы с регулярным выражением, нужна информация

Поэтому я хочу проверить из файла .txt, есть ли в нем действительные прокси, и я пытался получить некоторые совпадения, когда регулярное выражение никогда не работало, я решил попробовать другой подход, но я, кажется, не понять что-нибудь с C ++ Regex, я не понимаю, как это так отличается, и какашки,
я либо получаю ошибку сегментации 11, либо нет совпадений вообще.

regex r("[[:digit:]][[:digit:]][[:digit:]].[[:digit:]][[:digit:]][[:digit:]].[[:digit:]][[:digit:]][[:digit:]].[[:digit:]][[:digit:]][[:digit:]]:[[:digit:]][[:digit:]]");
//regex r("[[:digit:]]{1,3}(.[[:digit:]]{1,3}){3}:[[:digit:]]{1,5}");

smatch sm;
if ( regex_search(text,sm,r) )
{
//we've got a match
}

Надеюсь, я смогу помочь

1

Решение

С помощью регулярных выражений лучший способ справиться с ними — начать с малого и создать их. Может быть, начать с простого сопоставления одной цифры, затем, когда у вас есть это совпадение, сопоставить от одной до трех цифр, затем сопоставить от одной до трех цифр, после чего следует полная остановка.

Вы должны быть предупреждены, что регулярное выражение относительно недавно появилось в стандартной библиотеке C ++, поэтому оно может вообще не работать в вашей системе. Если это проблема для вас, Boost :: Regex будет работать.

Вы также можете использовать буквенные необработанные строки R «(\ d {1,3}.)» для кодирования вашего регулярного выражения, чтобы избежать удвоения обратной косой черты «\ d {1,3} \.» из-за экранирования в обычных C-строках. Начните с трех символов R «(и закончите с двумя)»

R «(\ d {1,3}.)» Может дать вам 1-3 цифры после a.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector