Боты и читы. Программируемый автокликер.


Визуальное создание ботов в Кибор

 Помощь      Поиск      Пользователи

 

Главная     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Поиск и замена текста по шаблонам регулярных выражений
Kibor
Отправлено: 25 Сентября, 2018 - 03:14:54
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 4767
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 169
Карма 26




regexsearch - Ищет в тексте участок по шаблону регулярного выражения.
regexreplace - Ищет в тексте участок по шаблону регулярного выражения и заменяет его на указанный текст.

regexstart - Узнает стартовую позицию найденного фрагмента. Работает только с regexsearch. Использовать данную функцию можно только после вызова regexsearch

regexend - Узнает финишную позицию найденного фрагмента. Работает только с regexsearch. Использовать данную функцию можно только после вызова regexsearch

Подробный синтаксис и интерактивные примеры, где можно настроить и проверить выражение

Синтаксис:

regexsearch вызывается с разным количеством параметров.
Первый вызов идет такой:
CODE:
regexsearch(1, #P[0], T, R);

или с флагами
CODE:
regexsearch(1, #P[0], T, R, IGNORECASE | SINGLELINE | MULTILINE | GLOBAL | RIGHTTOLEFT | EXTENDED);

Первый параметр - желаемое количество найденных фрагментов. При -1 ищутся все.
Второй - Указатель на string или массив string (если будет искаться более одного), в который запишется найденный фрагмент.
Третий - Строка string, в которой находится текст в котором ищем.
Четвертый - Строка string регулярного выражения.
Пятый необязательный - Один или более флагов режима работы.

Последующие вызовы, если мы не искали при первом вызове все вхождения, идет с двумя параметрами.
CODE:
regexsearch(-1, #P[0]);

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

При каждом последующем вызове будет искаться следующий фрагмент.

Функция regexsearch возвращает количество найденных фрагментов или 0 если не найдено.



regexreplace так же вызывается с разным количеством параметров.
Первый вызов идет такой:
CODE:
regexreplace(-1, #P, T, R, M);

или с флагами
CODE:
regexreplace(-1, #P, T, R, M, IGNORECASE | SINGLELINE | MULTILINE | GLOBAL | RIGHTTOLEFT | EXTENDED);

Первый параметр - желаемое количество заменяемых фрагментов. При -1 заменяет все.
Второй - Указатель на string, в который запишется измененный текст.
Третий - Строка string, в которой находится исходный текст в котором заменяем. Этот текст остается без изменений
Четвертый - Строка string регулярного выражения, фрагмент которого в тексте будет заменен.
Пятый - Строка string, в которой текст на который будет заменен.
Шестой необязательный - Один или более флагов режима работы.


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


Последующие вызовы, если мы не заменяли все при первом вызове все вхождения, идет с двумя параметрами.
CODE:
regexreplace(2, #P);

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

При каждом последующем вызове будет заменяться следующий фрагмент.

Функция regexreplace возвращает 1 если была замена или 0 если не было.






regexstart и regexend вызываются с разным количеством параметров, в зависимости от того как будут использоваться.

Один вызов:
CODE:
regexstart(#Pos_start[0]);


Параметр - Указатель на int или массив int, в который запишутся стартовые позиции найденных фрагментов. Массив выделять не менее количества фрагментов.

Возвращает количество найденных фрагментов, как и regexsearch.

CODE:
regexend(#Pos_end[0]);


Параметр - Указатель на int или массив int, в который запишутся финишные позиции найденных фрагментов. Массив выделять не менее количества фрагментов.

Возвращает количество найденных фрагментов, как и regexsearch.

Второй вызов используется если надо узнать позицию только одного выбранного фрагмента:

CODE:
regexstart(2);

Параметр - число означающее позицию какого фрагмента надо узнать.
В данном примере узнаем стартовую позицию 3 элемента.
Возвращает позицию элемента или -1, если данного элемента нет.


CODE:
regexend(2);

Параметр - число означающее позицию какого фрагмента надо узнать.
В данном примере узнаем финишную позицию 3 элемента.
Возвращает позицию элемента или -1, если данного элемента нет.




Описание флагов
IGNORECASE
По умолчанию регулярное выражение чувствительно к регистру. Примените этот режим, чтобы не учитывать регистр. Но наборы символов всегда чувствительны к регистру.

SINGLELINE
По умолчанию точка может соответствовать любому символу, кроме новой строки (\n). Режим SINGLELINE позволит точке соответствовать любому символу.

MULTILINE
Измените "^" и "$" на соответствие началу или концу строки для соответствия началу или концу любой строки в любом месте строки.
SINGLELINE и MULTILINE не исключают друг друга. Они имеют разные функции в разных местах, поэтому их можно использовать вместе.
Утверждения '\A' и '\Z' используются для соответствия только началу и концу строки, независимо от того, указан ли флаг MULTILINE.

GLOBAL
GLOBAL действует только на \G. Он позволяет \G соответствовать окончанию последнего совпадения, когда много раз повторяется. Без флага GLOBAL \G не используется в шаблоне.
По умолчанию операция замены заменит все совпадения, если даже GLOBAL не указан. Если вы не хотите заменять все совпадения, вы можете указать, сколько раз.

RIGHTTOLEFT
Поиск и замена справа на лево.

EXTENDED
Игнорирует символы пробела в шаблоне и рассматривает символы от # до конца строки как примечание.



Примеры:

Ищем по одному
CODE:
string P;
string T="1 USD Курс Доллара 66,8932 0,516 66,3772" +formatic(13)+formatic(10)+ "1 EUR Курс Евро 76,0576 0,8323 75,2253 Курс Гривны 0,0005"; // строка, в которой ищем
string R="Курс.*?(\d+[,.]\d+)";//регулярное выражение
if (regexsearch(1, #P, T, R)!=0)
{
messagebox (P);
while (regexsearch(1, #P)!=0)
{
messagebox (P);
}
}



Ищем все и пишем в массив
CODE:
string P[10];
string T="1 USD Курс Доллара 66,8932 0,516 66,3772" +formatic(13)+formatic(10)+ "1 EUR Курс Евро 76,0576 0,8323 75,2253 Курс Гривны 0,0005"; // строка, в которой ищем
string R="Курс.*?(\d+[,.]\d+)";//регулярное выражение
int k=regexsearch(-1, #P[0], T, R);
for (int n=0; n<k; n++)
{
messagebox (P[n]);
}



Найти в строке текст между value" и </div>
CODE:
string P;
string T="<div class="+formatic(34)+"info-value"+formatic(34)+">Âîðîíåæ, Ñîâåòñêèé ð-í</div>"; // ñòðîêà, â êîòîðîé èùåì
string R="(?<=value\"+formatic(34)+">)"+"(.*)+(?=</div>)";//ðåãóëÿðíîå âûðàæåíèå.
if (regexsearch(1, #P, T, R)==1)messagebox (P );


Поиск числа между WR, но WR не выводится в результат
CODE:
string P[10];
string T="WR555WR WRworldWR 777 нет WR222WR"; // строка, в которой ищем
string R="(?<=WR)[0-9]+(?=WR)";//регулярное выражение. WR не выводится в результат
int k=regexsearch(-1, #P[0], T, R);
for (int n=0; n<k; n++)
{
messagebox (P[n]);
}


Найдет test если после него есть bar или foo
CODE:
string P;
string T="testbarfoo";
//string T="testfoobar";
string R="^test(?=.*bar)(?=.*foo)";
if (regexsearch(1, #P, T, R)==1)messagebox (P);


Разные переменные для источника и приемника
CODE:
string T="qwertАБВqwertАБВ"; // строка, в которой заменяем
string R="[А-Я]";//Что заменяем (регулярное выражение)
string M="ГаВ";//Чем заменяем
string P;//Сюда запишем измененный текст

int k=regexreplace(2, #P, T, R, M);
messagebox (k);
messagebox (P);

k=regexreplace(-1, #P);
messagebox (k);
messagebox (P);




Одна переменная для источника и приемника
CODE:
string T="qwertАБВqwertАБВ"; // строка, в которой заменяем
string R="[А-Я]";//Что заменяем (регулярное выражение)
string M="ГаВ";//Чем заменяем

int k=regexreplace(2, #T, T, R, M);
messagebox (k);
messagebox (T);

k=regexreplace(-1, #T);
messagebox (k);
messagebox (T);


Замена чисел между WR
CODE:
string T="WR555WR WRworldWR 777 df WR222WR"; // строка, в которой заменяем
string R="(?<=WR)[0-9]+(?=WR)";//регулярное выражение. WR не заменяется
string M="ГаВ";//Чем заменяем

int k=regexreplace(1, #T, T, R, M);
messagebox (k);
messagebox (T);

k=regexreplace(-1, #T);
messagebox (k);
messagebox (T);


Удалить все пробелы при распознавание текста
CODE:
readtext (NUM, #Text, 8, 1, -1, -1, -1, -1, -1, 0, -1, ZVx1, ZVy1, ZVx2, ZVy2, -1);
regexreplace(-1, #Text, Text, " ", "");
messagebox (Text);


Символ " надо на данный момент заменять на formatic(34)
Поиск между =" и "]
CODE:
string T="поиск между ="+formatic(34)+"текст"+formatic(34)+"] и этим";
messagebox (T);
string R="(?<=="+formatic(34)+")(.*)(?="+formatic(34)+"])";
if (regexsearch(1, #T, T, R)==1)messagebox (T);
 
 Top
Skycrew
Отправлено: 26 Сентября, 2018 - 04:58:19
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 88
Дата рег-ции: Июль 2014  
Репутация: 0
Карма 0




Вот это офигенно! Я как раз собрался парсер делать) Спасибо!
p.s. К сожалению нет пейпола((
 
 Top
Kibor
Отправлено: 26 Сентября, 2018 - 05:37:32
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 4767
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 169
Карма 26




Skycrew , Пользуйтесь) Если что не хватает - пишите.
Попозже добавлю еще возврат позиций, работу с char
 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 08:37:39
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 4767
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 169
Карма 26




Добавил флаги

IGNORECASE
По умолчанию регулярное выражение чувствительно к регистру. Примените этот режим, чтобы не учитывать регистр. Но наборы символов всегда чувствительны к регистру.

SINGLELINE
По умолчанию точка может соответствовать любому символу, кроме новой строки (\n). Режим SINGLELINE позволит точке соответствовать любому символу.

MULTILINE
Измените "^" и "$" на соответствие началу или концу строки для соответствия началу или концу любой строки в любом месте строки.
SINGLELINE и MULTILINE не исключают друг друга. Они имеют разные функции в разных местах, поэтому их можно использовать вместе.
Утверждения '\A' и '\Z' используются для соответствия только началу и концу строки, независимо от того, указан ли флаг MULTILINE.

GLOBAL
GLOBAL действует только на \G. Он позволяет \G соответствовать окончанию последнего совпадения, когда много раз повторяется. Без флага GLOBAL \G не используется в шаблоне.
По умолчанию операция замены заменит все совпадения, если даже GLOBAL не указан. Если вы не хотите заменять все совпадения, вы можете указать, сколько раз.

RIGHTTOLEFT
Поиск и замена справа на лево.

EXTENDED
Игнорирует символы пробела в шаблоне и рассматривает символы от # до конца строки как примечание.
 
 Top
Kibor
Отправлено: 07 Октября, 2018 - 12:27:13
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 4767
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 169
Карма 26




Добавил функции возвращающие позиции найденных фрагментов
regexstart - Узнает стартовую позицию найденного фрагмента. Работает только с regexsearch. Использовать данную функцию можно только после вызова regexsearch

regexend - Узнает финишную позицию найденного фрагмента. Работает только с regexsearch. Использовать данную функцию можно только после вызова regexsearch

Подробнее Регулярные выражения
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by ExBB FM 1.0 Final