User 13204940 Ответов: 2

Простое многострочное регулярное выражение В C++


Привет
Я пытаюсь вернуть массив совпадений, используя этот код:
std::smatch sm;

if (regex_search(content, sm, regex("[.+]")))
{
	for (int i = 1; i < static_cast<int>(sm.size()); i++)
	{
		cout << sm[i] << endl;
	}
}


Строка для сопоставления поставляется в следующем формате:

[
	name: bin1
	type: static
	px: 14
	py: 27
	pz: 93
	rx: 45
	ry: 0
	rz: 0
]
[
	name: car1
	type: static
	px: 14
	py: 27
	pz: 93
	rx: 45
	ry: 0
	rz: 0
]


Я попытался использовать регулярное выражение "/[.+]/s", чтобы разрешить многострочность, но компилятор продолжает жаловаться на то, что символы "[" и "/" не распознаются. Когда я дважды избегаю их, ошибка исчезает, но регулярное выражение ничего не возвращает.

С кодом, который у меня есть на данный момент, в консоли ничего не появляется.

Что я уже пробовал:

Все, что я мог придумать, так что теперь я здесь

PIEBALDconsult

Используйте обратную косую черту ( \ ), а не косую черту ( / ), чтобы избежать скобок.

2 Ответов

Рейтинг:
19

CPallini

Попробуйте, например

#include <iostream>
#include <regex>
using namespace std;
int main()
{
  std::smatch sm;

  string content ="[\nname: bin1\ntype: static\npx: 14\n]\n[\nname: car1\ntype: static\npx: 14\n]";

  while (regex_search(content, sm, regex("\\[([^\\]]+)\\]")))
  {
    cout << sm[1] << endl;
    content = sm.suffix();
  }

}


Рейтинг:
0

Patrice T

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение:
Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]


[no name]

Я действительно использовал RegExr и Debuggex, оба работали нормально, но шаблоны регулярных выражений не работали в C++

Patrice T

Существует более чем 1 разновидность регулярных выражений и язык C++ имеют определенные правила для строк char (как вы можете видеть в решении 1).