Zireael |
Отправлено: 17 Августа, 2018 - 13:46:12
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
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])); |
|
|
Zireael |
Отправлено: 20 Августа, 2018 - 13:40:25
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Ещё примеры (dll должна быть в папке с kibor.exe):
Найти в строке '19/20' два числа разделённых / (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll");
string s="19/20"; // строка, в которой ищем
string regex="(\d+)\s*\/\s*(\d+)"; // регулярное выражение
char result[2][10];
int x=regex_search(s, regex, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
int num1=formatsn(format(#result[0][0]));
int num2=formatsn(format(#result[1][0]));
messagebox(num1);
messagebox(num2);
}
/*
Пояснение что значит регулярное выражение: (\d+)\s*\/\s*(\d+)
\d+ - любое целое число. Заключено в скобки чтобы обозначить что его надо вернуть в качестве результата
\s* - \s означает пробел, * - символов может быть 0 и больше, т. е. пробела может не быть вообще или быть несколько
\/ - означает / (слеш), т. к. / это спецсимвол, то его нужно экранировать, поэтому перед ним \ (обратный слеш).
\s* - \s - пробел
\d+ - любое целое число.
*/
Удалить из строки все пробелы (Отобразить)CODE:external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll");
string s1="11 123"; // строка
char result[100];
messagebox(s1);
int x=regex_replace(s1, " ", "", address(#result[0]), sizearray(result));
if(x>0)messagebox(format(#result[0]));
Удалить пробелы вначале и конце строки (trim) (Отобразить)CODE:external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll");
string s1=" 123 456 789 ";
char result[100];
messagebox(s1+formatic(13)+formatic(10)+"Символов в строке: "+format(size(s1)));
int x=regex_replace(s1, "^\s+|\s+$", "", address(#result[0]), sizearray(result));
if(x>0)
messagebox(format(#result[0])+formatic(13)+formatic(10)+"Символов в строке: "+format(size(format(#result[0]))));
Заменить пробелы на табуляцию (Отобразить)CODE:external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll");
string s1="qwe rty 123 asd"; // строка
char result[100];
messagebox(s1);
int x=regex_replace(s1, " ", formatic(9)+formatic(0), address(#result[0]), sizearray(result));
if(x>0)messagebox(format(#result[0]));
Заменить запятые на точки (Отобразить)CODE:external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll");
string s1="123,456"; // строка
string r1="\,"; // запятую
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]));
В строке 'X=123, Y=456' поменять местами значения X и Y (Отобразить)CODE:external(INT, "regex_replace", "regex_replace", pathfolder()+"\regex.dll");
string s1="X=123, Y=456"; // строка
string r1="(.*?)(\d+)(.*?)(\d+)(.*?)";
string replace="$1$4$3$2$5";
char result[100];
messagebox(s1);
int x=regex_replace(s1, r1, replace, address(#result[0]), sizearray(result));
if(x>0)messagebox(format(#result[0]));
Проверить наличие в строке символов (Отобразить)CODE:// 1. Хотя бы 1 заглавной буквы.
// 2. Хотя бы 1 строчная буквы.
// 3. Хотя бы 1 цифры.
// 4. Строка длиной от 7 до 10 символов.
external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll");
string r="^(?=.*[A-ZА-ЯЁ])(?=.*[a-zа-яё])(?=.*?\d).{7,10}$";
char result[1][20];
string s="qWe123rty"; // строка, в которой есть заглавные, строчные и числа
int x=regex_search(s, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox("+++");
else messagebox("---");
s="qwe123rty"; // в строке нет заглавных букв, т. е. не соответствует шаблону
x=regex_search(s, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox("+++");
else messagebox("---");
Найти в строке текст между value" и </div> (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll");
string s="<div class="+formatic(34)+"info-value"+formatic(34)+">Воронеж, Советский р-н</div>";
messagebox(s);
char result[1][100];
string r="value\"+formatic(34)+">"+"(.*)+<\/div>";
int x=regex_search(s, r, 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");
char s[100];
char p[99999];
string r="(http:.*?)[\r\n\"+formatic(39)+"\"+formatic(34)+"]";
char result[50][200];
string result2="";
//messagebox(r);
if (opensocket ("kibor-bot.com", 80)==1)
{
strcpy(#s[0], "GET http:/"+"/kibor-bot.com/stat/programmed-autoclicker.php HTTP/1.0");
int sizf=size(#s[0]);
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(13);s[sizf+3]=formatic(10);
if (sendhtml(#s[0], sizf+4)>0)
{
recvhtml(#p[0], 99999);
//messagebox (format(#p[0])); // в строке содержимое страницы kibor-bot.com
int x=regex_iterator(format(#p[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
messagebox("Найдено ссылок: "+format(x));
if(x>0)
{
for(int i=0; i<x; i++)result2=result2+format(#result[i][0])+formatic(13)+formatic(10);
}
}
closesocket ();
messagebox(result2);
} |
|
|
AdryV |
Отправлено: 29 Августа, 2018 - 20:40:24
|
Специалист
Покинул форум
Сообщений всего: 449
Дата рег-ции: Май 2016
Репутация: 11
|
есть пара вопросов.
есть файл и в нем ~221000 строк такого типа:
CODE:"5" "1" "41" "" "Кинжал, с которым справится даже неопытный воин.\n\nБазовый уровень атаки 4."
мне из этого файла нужно выдрать все строки такого типа:
CODE:"5" "2" "41" "" "+0 Кинжал"
и
"5" "6" "33" "" "Гарпия"
когда пытаюсь с помощью этого кода выдрать вывод получается полнейший бред, я так предполагаю что сам Kibor не тянет и массивы и переменные засераются
но также предполагаю что возможно и сама dll не тянет
а также возможно у меня поиск кривой
в общем вот мой код:
код (Отобразить)CODE:int pos_size_button0[2][4];
string text_button0[2];
int flag_button0[2];
pos_size_button0[0][0]=8; pos_size_button0[0][1]=35; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
pos_size_button0[1][0]=129; pos_size_button0[1][1]=34; pos_size_button0[1][2]=100; pos_size_button0[1][3]=20;
text_button0[0]="items"; text_button0[1]="mobs";
//////////
int pos_size_combo0[1][4];
string text_combo0[1][2];
int strok_combo0[1];
int flag_combo0[1];
pos_size_combo0[0][0]=66; pos_size_combo0[0][1]=6; pos_size_combo0[0][2]=100; pos_size_combo0[0][3]=80;
strok_combo0[0]=2;
text_combo0[0][0]="PN"; text_combo0[0][1]="HAZY";
flag_combo0[0]=0;
//////////
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
COMBO, #pos_size_combo0[0][0], #text_combo0[0][0], #strok_combo0[0], #flag_combo0[0]);
//////////
showdialog(0, "Диалог", 835, 390, 250, 100, 1, 1);
//////////
string name;
string path;
string path2;
external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll");
string k="\"+formatic(34);
string r;
string id;
string d="\d+"+k+"."+k+k+"."+k+"(.*)"+k+"$";
string name_konvert;
char result[1][10000];
string a[999999];
loop()
{
if(flag_button0[0]==1) //items
{
flag_button0[0]=0;
r=k+"5"+k+"."+k+"2"+k+"."+k+"(.*)"+k+"."+k+k;
name_konvert=text_button0[0];
proverka_combo();
}
if(flag_button0[1]==1) //mobs
{
flag_button0[1]=0;
r=k+"5"+k+"."+k+"6"+k+"."+k+"(.*)"+k+"."+k+k;
name_konvert=text_button0[1];
proverka_combo();
}
sleep(50);
}
//
function proverka_combo()
{
if(flag_combo0[0]==0)
{
path=pathfolder()+text_combo0[0][0]+"/LangPack_"+name_konvert+".tsv";
path2=pathfolder()+text_combo0[0][0]+"/"+name_konvert+"_"+text_combo0[0][0]+".ini";
}
else
{
path=pathfolder()+text_combo0[0][1]+"/LangPack_"+name_konvert+".tsv";
path2=pathfolder()+text_combo0[0][1]+"/"+name_konvert+"_"+text_combo0[0][1]+".ini";
}
konvert();
}
//
function konvert()
{
int i=0;
if(fopen(path, "r")!=0) // если файл открылся
{
while (freadline(a[i])!=0 && i<999999) // читаем и записываем весь файл в массив
{
i++;
}
fclose(); // закрыть файл
}
else
{
messagebox("Нет файла");
goto ex;
}
if(fopen(path2, "w")!=0)
{
for(int n1=0; n1<i; n1++)
{
int x=regex_search(a[n1], r, address(#result[0][0]), sizearray(result), sizearray(result[]));
id=format(#result[0][0]);
int z=regex_search(a[n1], d, address(#result[0][0]), sizearray(result), sizearray(result[]));
name=format(#result[0][0]);
fwrite("["+id+"]"+formatic(13)+formatic(10)+name+"=");
fwrite(ENDL);
fwrite("["+name+"]"+formatic(13)+formatic(10)+id+"=");
fwrite(ENDL);
}
fclose();
}
messagebox("Завершено");
ex:;
}
вот собсно сами файлы
в общем подскажите как мне сделать что бы не руками выдергивать файлы mobs и items а что бы все сразу и вместе обработалось
выходной файл должен получиться чет типа
CODE:[41]
+0 Кинжал=
[+0 Кинжал]
41=
[42]
+1 Кинжал=
[+1 Кинжал]
42= (Отредактировано автором: 29 Августа, 2018 - 20:49:36) |
|
|
Zireael |
Отправлено: 30 Августа, 2018 - 03:33:17
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
На примере файла LangPack_mobs: (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
char result[2][100];
string k="\"+formatic(34);
string r=k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"(.*)"+k;
string path="C:\LangPack_mobs.tsv"; // путь к файлу
string path_out="C:\result.txt"; // сюда сохранится результат
string s[20]; // массив на 20 строк, ошибки не будет даже если в файле больше строк
// просто будут прочитаны 20 строк
if(fopen(path, "r")!=0) // если файл открылся
{
int size_array=sizearray(s)-1;
for(int i=0; freadline(s[i])>0 && i < size_array; i++){} // читаем файл в массив
int count_string=i; // количество строк в файле
fclose();
messagebox("Файл прочитан");
if(fopen(path_out, "w")>0) // если файл для записи открылся
{
for(i=0; i<count_string; i++) // для всех строк
{
int x=regex_search(s[i], r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>1) // если найдены обе подгруппы
{
fwrite(format(#result[0][0])+" "+format(#result[1][0])); fwrite(ENDL); // пишем в файл
}
}
fclose();
messagebox("Файл записан");
start(path_out);
}
}
Обратите внимание на регулярное выражения, в нём две пары круглых скобок. Т. е. функция вернёт в первую строку массива result то что в первых скобках (т. е. число) и во вторую строку, то что во вторых скобках.
Цитата: "5" "6" "33" "" "Гарпия"
По сути мы ищем то что находится между "". Т. е. 33 и Гарпия. Регулярное выражение можно так понять:
кавычка (число) кавычка пробел0илибольше кавычка кавычка пробел0илибольше кавычка (любые символы) кавычка
Цитата: мне из этого файла нужно выдрать все строки такого типа:
Цитата: "5" "1" "41" "" "Кинжал, с которым справится даже неопытный воин.\n\nБазовый уровень атаки 4."
"5" "2" "41" "" "+0 Кинжал"
"5" "6" "33" "" "Гарпия"
И чем они отличаются? 3 числа в кавычках, 2 кавычки, текст в кавычках.
+0 Кинжал хоть отличается числом вначале. А Гарпию как отличать от Кинжал, с которым.. разве что по длине текста или каким-то символам. |
|
|
Zireael |
Отправлено: 23 Сентября, 2018 - 18:45:20
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Ещё примеры (dll должна быть в папке с kibor.exe):
Курс доллара/евро с сайта яндекса (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
char C[1000000];
string r;
char result[1][10];
int x;
if (sendgetweb(#C[0], "", "GET", "https:/"+"/yandex.ua", "")>0) // получить содержимое страницы
{
r="USD.*?(\d{2}\,\d{2})"; // искать число после USD
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox("Курс доллара к гривне: "+format(#result[0][0])); // результат
r="EUR.*?(\d{2}\,\d{2})"; // искать число после EUR
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox("Курс евро к гривне: "+format(#result[0][0])); // результат
}
if (sendgetweb(#C[0], "", "GET", "https:/"+"/yandex.ru", "")>0)
{
r="USD.*?(\d{2}\,\d{2})";
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox("Курс доллара к рублю: "+format(#result[0][0])); // результат
r="EUR.*?(\d{2}\,\d{2})";
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)messagebox("Курс евро к рублю: "+format(#result[0][0])); // результат
}
Узнать сколько 'Сегодня форум посетили' kibor-bot.com/forum (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
char C[100000];
string r;
char result[6][100];
int x;
if (sendgetweb(#C[0], "", "GET", "http:/"+"/kibor-bot.com", "/forum/")>0) // получить содержимое страницы
{
r="(Сегодня форум посетили:).*?(\d+).*?(гостей:).*?(\d+).*?(зарегистрированных:).*?(\d+)";
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
messagebox(format(#result[2][0])+" "+format(#result[3][0]));
messagebox(format(#result[4][0])+" "+format(#result[5][0]));
}
r="(Участников).*?(\d+)";
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
}
r="(Сообщений).*?(\d+)";
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
}
r="(Тем).*?(\d+)";
x=regex_search(format(#C[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
}
} |
|
|
Kibor |
Отправлено: 23 Сентября, 2018 - 19:00:53
|
Эксперт
Покинул форум
Сообщений всего: 8227
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Zireael пишет: Узнать сколько 'Сегодня форум посетили'
А почему не
string всместо чара, если все равно даем стринг (Отобразить)CODE:external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
string C;
string r;
char result[6][100];
int x;
if (sendgetweb(#C, "", "GET", "http:/"+"/kibor-bot.com", "forum")>0) // получить содержимое страницы
{
r="(Сегодня форум посетили:).*?(\d+).*?(гостей:).*?(\d+).*?(зарегистрированных:).*?(\d+)";
x=regex_search(C, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
messagebox(format(#result[2][0])+" "+format(#result[3][0]));
messagebox(format(#result[4][0])+" "+format(#result[5][0]));
}
r="(Участников).*?(\d+)";
x=regex_search(C, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
}
r="(Сообщений).*?(\d+)";
x=regex_search(C, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
}
r="(Тем).*?(\d+)";
x=regex_search(C, r, address(#result[0][0]), sizearray(result), sizearray(result[]));
if(x>0)
{
messagebox(format(#result[0][0])+" "+format(#result[1][0]));
}
} |
|
|
Zireael |
Отправлено: 09 Мая, 2019 - 18:37:57
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: в любой ситуации ошибка....
Какая ошибка?
f=5, j=2 такой строки нет. В приведённых 3 строках есть f=2, j=10.
CODE:external(INT, "wsprintf", "wsprintfA", "User32.dll" );
external(INT, "regex_search", "regex_search", pathfolder()+"\regex.dll" );
char a[1024];
wsprintf(address(#a[0]), "%c2%c %c10%c %c951%c %c%c %cСнижение получаемого урона в ближнем бою.%c%c%c", 34,34,34,34,34,34,34,34,34,13,10,34);
messagebox(format(#a[0]));
string k="\"+formatic(34);
string j="10";
string f="2";
string r=k+f+k+"\s*"+k+j+k+"\s*"+k+"(\d+)"+k+"\s*"+k+k+"\s*"+k+"((?:\r\n|.)*)"+k;
char result[2][100];
int x=regex_search(format(#a[0]), r, address(#result[0][0]), sizearray(result), sizearray(result[]));
messagebox("Найдено: "+format(x));
{
for(int i=0; i<x; i++)messagebox(format(#result[i][0]));
} |
|
|
|