https://drive.google.com/open?id=1tVl2hwvpO7M8neua3_00cDrJfFYD2iE_
Скачать dll и закинуть в папку с kibor.exe.
Доступные функции:
regex_search - поиск первого совпадения соответствующего регулярному выражению.
regex_iterator - поиск всех совпадений соответствующих регулярному выражению.
regex_replace - замена текста в строке.
Синтаксис:
regex_search(<строка, в которой ищем>, <регулярное выражение>, <адрес массива принимающего результат>, <количество строк в массиве>, <длина строк в массиве> )
regex_iterator(тоже что и regex_search)
regex_replace(<строка, в которой заменить>, <регулярное выражение>, <на что заменить>, <адрес массива принимающего результат>, <размер массива> )
Функция regex_search возвращает:
1 или больше - совпадение найдено. Если в регулярном выражении использовались подгруппы для захвата выражения, то возвращается количество подгрупп.
0 - совпадений не найдено.
-1 - размер массива, принимающего результат, меньше чем нужно.
-2 - длина строки массива, принимающего результат, меньше чем нужно.
Функция regex_iterator возвращает:
1 или больше - совпадение найдено. Если в регулярном выражении использовались подгруппы для захвата выражения, то возвращается количество подгрупп.
0 - совпадений не найдено.
-1 - размер массива, принимающего результат, меньше чем нужно.
-2 - длина строки массива, принимающего результат, меньше чем нужно.
Функция regex_replace возвращает:
1 - в случае успеха.
-1 - размер массива, принимающего результат, меньше чем нужно.
В длл используется библиотека c++ <regex>.
Описание регулярных выражений:
https://msdn.microsoft.com/ru-ru...ry/bb982727.aspx
Кому лень читать, краткая справка. (Отобразить)\d - числа 0-9
\w - a-z, A-Z, 0-9 и _
\s - пробел
\D - не число
\W - не a-z, A-Z, 0-9 и _
\S - не пробел
. - любой символ
* - 0 или больше
+ - 1 или больше
? - 0 или 1
{3} - ровно 3
{3,} - 3 или больше
{3,5} - 3, 4 или 5
Все спецсимволы (^$()<>[]{}\|.=*+?) экранируются через \ (обратный слеш). Т. е. если надо найти в тексте знак вопроса, то пишется \?.
\d+ - означает любое количество цифр от 1 и более
\d{3} - число из 3х цифр
[abcde] - одна любая из указанных букв
[abcd]+ - от 1 и более из указанных букв
Примеры:
Найти в строке целое число (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
string s="Найти в строке это 6712 число";
char result[1][10];
messagebox(s);
int x=regex_search(s, "\d+", address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox(format(#result[0][0]));
В строке: 'Решите пример: 12 + 34=' найти числа и знак операции (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
string s="Решите пример: 12 + 34=";
string r="(\d+)\s*([\+\-\*\\])\s*(\d+)";
char result[3][10];
int x=regex_search(s, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox(format(#result[0][0])+" "+format(#result[1][0])+" "+format(#result[2][0]));
Найти в строке дату и номер телефона (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
string s="В этой строке ищем дату 17.09.2018 и номер телефона +7(495)-123-45-67";
char result[1][20];
messagebox(s);
int x;
x=regex_search(s, "\d{2}\.\d{2}\.(?:\d{4}|\d{2})", address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox(format(#result[0][0]));
x=regex_search(s, "\+[\d+()-]+", address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox(format(#result[0][0]));
Найти в строке все целые числа (Отобразить)CODE:external(INT, "regex_iterator", "regex_iterator", pathfolder()+"\regex.dll" );
string s="text 123 текст 81 ещё текст 99"; // строка, в которой ищем
string r="\d+"; // регулярное выражение означающее: ищем число состоящее из любого количества цифр
char result[30][10];
int x=regex_iterator(s, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
messagebox("Найдено совпадений: "+format(x));
if(x>0)
{
for(int i=0; i<x; i++)
messagebox(format(#result[i][0])); // результат
}
Найти в строке курс доллара и евро (Отобразить)CODE:external(INT, "regex_iterator", "regex_iterator", pathfolder()+"\regex.dll" );
external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll");
string s="1 USD Курс Доллара 66,8932 0,516 66,3772"+formatic(13)+formatic(10)+
"1 EUR Курс Евро 76,0576 0,8323 75,2253"; // строка, в которой ищем
string r="Курс.*?(\d+[,.]\d+)";
char result[2][10];
messagebox(s);
int x=regex_iterator(s, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
for(int i=0; i<x; i++)
messagebox(format(#result[i][0])); // результат
}
// заменяем запятую на точку
string r1="\,"; // запятая
string replace="."; // заменяем на точку
char result2[10];
x=regex_replace(format(#result[0][0]), r1, replace, address(#result2[0]), sizearray(result2));
if(x>0)messagebox("Заменили "+format(#result[0][0])+" на "+format(#result2[0]));
double y=formatsn(format(#result2[0])); // перевели в double
messagebox(y);
Удалить из строки все цифры (Отобразить)CODE:external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll" );
string s1="qwerty 12 asd"; // строка
string r1="\d"; // любая цифра
string replace=""; // заменяем на ""
char result[100];
messagebox(s1);
int x=regex_replace(s1, r1, replace, address(#result[0]), sizearray(result));
if(x>0)messagebox(format(#result[0]));