Цитата: Что именно надо хранить в этом массиве string?
Результат regex_search или regex_iterator.
Функция в dll принимает:
Строку, в которой надо что-то найти.
Регулярное выражение.
Указатель на массив, в который возвращает результат поиска.
Пока сделал чтобы возвращало в двухмерный char. Но, было удобнее в string. По сути вот это:
Цитата: Так же будет работать такая выборка данных с помощью /\
/RU\+, ALL+, /NUM\+
Сразу выведет ИМЯ ТЕЛЕФОН без лишней информации.
Вывод будет в массив.
Удобнее вернуть в двухмерный string, чем в char.
(Добавление)
dll
Вот так сейчас это выглядит (проверял только в win10):
CODE:// код dll, собирался в vs 2017
#include "stdafx.h"
#include <iostream>
#include <string>
#include <regex>
using namespace std;
extern "C" __declspec(dllexport)int regexp(char* ss, char* sss, char* result, int size_x, int size_y)
{
string s(ss);
smatch match;
regex e(sss);
if (regex_search(s, match, e))
{
for(int i=0; i<size_x; i++)
strcpy_s(result + size_y * i, size_y, match.str(i).c_str());
return 1;
}
else return 0;
}
CODE:// код в кибор
external(INT, "regexp", "regexp", "C:\Users\abc\Desktop\regexp.dll");
string s="Какой-то текст. User: Вася, +7(495)123-45-67. Ещё текст"; // строка, в которой ищем имя и телефон
string r="User.*?([а-яА-ЯёЁ]+).*?([\d-+()]+)"; // регулярное выражения
char result[3][100]; //сюда запишется результат
// передаётся строка, регулярка, указатель, размеры массива
int x=regexp(s, r, address(#result[0][0]), 3, 100); // если найдено возвращает 1, иначе 0
//messagebox(x);
if(x==1)
{
messagebox(format(#result[0][0])); // найденная строка
messagebox(format(#result[1][0])); // захват1 - то что в первых скобках
messagebox(format(#result[2][0])); // захват2 - то что во вторых скобках
}
else messagebox("Не найдено");
Неплохо бы переделать чтобы в string возвращало. |