Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 5.44 Регулярные выражения

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

11. Dantes3000 - 03 Февраля, 2019 - 15:24:07 - перейти к сообщению
А как словами это звучит? [^#]+
12. Zireael - 03 Февраля, 2019 - 15:42:58 - перейти к сообщению
 Цитата:
А как словами это звучит? [^#]+

[^#] - означает любой символ кроме #
+ - означает от 1 символа и больше
[^#]+ - кроме # от 1 и больше символов
Если по-проще, то ищет любые символы пока не встретит #, что нашлось попадает в массив, ищет дальше по тому же принципу.
13. Dantes3000 - 03 Февраля, 2019 - 17:35:48 - перейти к сообщению
Zireael , спасибо.
Наверно, пройдет не мало времени, пока я разберусь.
Вот уже минут 20 думаю как сделать, чтобы пробел в конце не копировался в массив.
14. Zireael - 03 Февраля, 2019 - 17:52:28 - перейти к сообщению
 Цитата:
Вот уже минут 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]);
}
15. Dantes3000 - 03 Февраля, 2019 - 18:08:23 - перейти к сообщению
 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);

(Добавление)
а вообще, конечно, было бы проще удалить из строки пробелы перед и после #
Не знаю зачем я вообще их поставил
16. Zireael - 03 Февраля, 2019 - 18:25:02 - перейти к сообщению
 Цитата:
в начале там пробела нет

Это никак не влияет, их вообще может не быть, вернёт всю строку ничего не удаляя.
 Цитата:
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);
17. Dantes3000 - 01 Марта, 2019 - 04:12:31 - перейти к сообщению
Где я опять тут натупил? Хммм...

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);
18. Kibor - 01 Марта, 2019 - 04:18:50 - перейти к сообщению
 Dantes3000 пишет:
int s=regexsearch(-1, #str, str, r);

тут.
попытка запихнуть много не в массив.
переполнение.
19. Dantes3000 - 01 Марта, 2019 - 04:21:36 - перейти к сообщению
Ни понел Хммм...

Переполнение строки? Что ж туда записывается, что она переполняется?
20. Kibor - 01 Марта, 2019 - 04:34:59 - перейти к сообщению
Первый параметр -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]);

Powered by ExBB FM 1.0 Final