Автоматизация и боты

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

 Страниц (25): « 1 [2] 3 4 5 6 7 8 9 » В конец    

> Описание: Поиск и замена текста по шаблонам регулярных выражений
Dantes3000
Отправлено: 03 Февраля, 2019 - 23:24:07
Post Id



Пользователь
Эксперт


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




А как словами это звучит? [^#]+
 
 Top
Zireael
Отправлено: 03 Февраля, 2019 - 23:42:58
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
А как словами это звучит? [^#]+

[^#] - означает любой символ кроме #
+ - означает от 1 символа и больше
[^#]+ - кроме # от 1 и больше символов
Если по-проще, то ищет любые символы пока не встретит #, что нашлось попадает в массив, ищет дальше по тому же принципу.
 
 Top
Dantes3000
Отправлено: 04 Февраля, 2019 - 01:35:48
Post Id



Пользователь
Эксперт


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




Zireael , спасибо.
Наверно, пройдет не мало времени, пока я разберусь.
Вот уже минут 20 думаю как сделать, чтобы пробел в конце не копировался в массив.
 
 Top
Zireael
Отправлено: 04 Февраля, 2019 - 01:52:28
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
Вот уже минут 20 думаю как сделать, чтобы пробел в конце не копировался в массив.

Только в конце или вначале тоже?
CODE:
string text="a (1).jpg "+formatic(35)+" 15:30 4.2.19 "+formatic(35)+" Строчка 1 +formatic(13)+ Строчка 2. "+formatic(35);

int i;
string array[3]; // сюда результат запишется
string r="[^"+formatic(35)+"]+"; // регулярное выражение
//messagebox(r);

int x=regexsearch(sizearray(array), #array[0], text, r);
//messagebox("Найдено совпадений: "+format(x));
if(x>0)
{
for(i=0; i<x; i++)messagebox("Длина строки: "+format(size(array[i]))+formatic(13)+formatic(10)+array[i]); // это можно убрать

for(i=0; i<x; i++)regexreplace(1, #array[i], array[i], "^ *(.+?) *$", "$1"); // удалить пробелы вначале и конце строки
for(i=0; i<x; i++)messagebox("Длина строки: "+format(size(array[i]))+formatic(13)+formatic(10)+array[i]);
}
 
 Top
Dantes3000
Отправлено: 04 Февраля, 2019 - 02:08:23
Post Id



Пользователь
Эксперт


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




 Zireael пишет:
Только в конце или вначале тоже?

В начале строки - название файла, поэтому из-за пробела ошибку выбивало, в начале там пробела нет, а в остальных случаях не критично.

Я просто последний символ удалил, меньше кода получилось
CODE:
char ch[256];
strcpy(#ch[0], array[0]);
name_img=format(#ch[0], size(#ch[0])-1);

(Добавление)
Кстати, думал потом +formatic(13)+ в строке заменять на перенос, но так не работает, пришлось поменять на +перенос+

CODE:
string text="a (1).jpg "+formatic(35)+" 15:30 4.2.19 "+formatic(35)+" Строчка 1 +formatic(13)+ Строчка 2. "+formatic(35);

string s=formatic(13);
//regexreplace(-1, #text, text, "+formatic"+formatic(40)+"13"+formatic(41)+"+", s); //не работает
regexreplace(-1, #text, text, "+formatic(13)+", s); //тоже

messagebox(text);

(Добавление)
а вообще, конечно, было бы проще удалить из строки пробелы перед и после #
Не знаю зачем я вообще их поставил
 
 Top
Zireael
Отправлено: 04 Февраля, 2019 - 02:25:02
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
в начале там пробела нет

Это никак не влияет, их вообще может не быть, вернёт всю строку ничего не удаляя.
 Цитата:
regexreplace(-1, #text, text, "+formatic(13)+", s); //тоже

Спец. символы надо экранировать, т. е. писать через обратный слеш \+, \(, \).
CODE:
string text="a (1).jpg "+formatic(35)+" 15:30 4.2.19 "+formatic(35)+" Строчка 1 +formatic(13)+ Строчка 2. "+formatic(35);
string s=formatic(13);
messagebox(text);

regexreplace(1, #text, text, "\+formatic\(13\)\+", s); \\ заменит +formatic(13)+ на перенос строки
messagebox(text);
 
 Top
Dantes3000
Отправлено: 01 Марта, 2019 - 12:12:31
Post Id



Пользователь
Эксперт


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




Где я опять тут натупил? Хммм...

CODE:
//string str="4.jpg"+formatic(38)+"1:11 1.3.2019"+formatic(38)+"<3"; //не вылетает
string str="4.jpg"+formatic(38)+"1:11 1.3.2019"+formatic(38)+"<3"+formatic(38); //вылетает

string r=formatic(38);

int s=regexsearch(-1, #str, str, r);

messagebox(s);
 
 Top
Kibor
Отправлено: 01 Марта, 2019 - 12:18:50
Post Id



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


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




 Dantes3000 пишет:
int s=regexsearch(-1, #str, str, r);

тут.
попытка запихнуть много не в массив.
переполнение.
 
 Top
Dantes3000
Отправлено: 01 Марта, 2019 - 12:21:36
Post Id



Пользователь
Эксперт


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




Ни понел Хммм...

Переполнение строки? Что ж туда записывается, что она переполняется?
 
 Top
Kibor
Отправлено: 01 Марта, 2019 - 12:34:59
Post Id



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


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




Первый параметр -1
что означает что ищутся все &
Их тут 3.
А string str это не массив.
Поскольку #str объявлен указателем приемником, то в этот не массив функция regexsearch пытается запихнуть все 3 найденные позиции.

Короче это все равно что
CODE:
string a="бла бла";
a[0]="Еще бла";
a[1]="и Еще бла";
a[2]="И напоследок чтоб наверняка сделать нее правильно.";
messagebox (a);

Выкинет не выкинет зависит от того что там попортит в памяти не выделенной и куда мы пихаем что то.

правильно:
CODE:
string str="4.jpg"+formatic(38)+"1:11 1.3.2019"+formatic(38)+"<3"+formatic(38); //вылетает

string r=formatic(38);
string ppp[100];
int s=regexsearch(-1, #ppp[0], str, r);

messagebox(s);

messagebox(ppp[0]);
messagebox(ppp[1]);
messagebox(ppp[2]);
 
 Top
Страниц (25): « 1 [2] 3 4 5 6 7 8 9 » В конец
Сейчас эту тему просматривают: 6 (гостей: 6, зарегистрированных: 0)
« О программе Кибор »


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




Powered by