БлогNot. Есть ли регулярные выражения в C++?

Есть ли регулярные выражения в C++?

При программном сопоставлении строк со сколь угодно сложными шаблонами человечество пока не придумало ничего удобнее регулярных выражений, которые есть сегодня буквально везде (см. по ссылке).

Есть ли поддержка "регулярок" в C++? Да, есть, но только в новых стандартах C++11/14.

Пример по ссылке тоже неплох, но мы сделаем проще и наглядней. Проверено в Visual Studio 2015, должно работать примерно с 2013-й версии. Пространство имён std подключено не только для <iostream>, но и потому, что методы для работы с RegExp определены также в нём.

При работе в QT пятых версий для поддержки стандарта C++11 достаточно указать опцию

QMAKE_CXXFLAGS += -std=gnu++11

а лучше

CONFIG += c++11

в файле проекта .pro.

#include <iostream>
#include <string>
#include <regex>
using namespace std;

int main() {
	string str = "helloW,world,hello, you are like the hell!"; //Строка для разбора

	string s(str); 
	smatch m; //Контейнер для вхождений регулярного выражения
	regex e("\\b(hel)([^\\s\\.,\\?!:;]*)"); 
	 //Регулярка "слова, начинающиеся с букв "hel", разделённые пробелом или знаком препинания (не все знаки)"

	cout << "String: " << endl << s << endl;

	cout << "Whole words:" << endl; //Печатаем целые слова
	while (regex_search(s, m, e)) {
	 cout << m[0] << endl;
	 s = m.suffix().str();
	}

	cout << "All matches:" << endl; //Печатаем списки всех найденных вхождений
	
	s = str; //Предыдущий разбор "испортил" строку s
	while (regex_search(s, m, e)) {
		for (auto x : m) cout << x << " ";
		cout << endl;
		s = m.suffix().str();
	}

	cin.get(); return 0;
}

 Статья по C++11 in Qt5

17.05.2017, 21:44 [3738 просмотров]


теги: c++ qt памятка studio

К этой статье пока нет комментариев, Ваш будет первым