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

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

41. Kibor - 22 Мая, 2019 - 05:02:44 - перейти к сообщению
Правильно, это выделять достаточно памяти для строки.
+1 для 0
42. 007wan - 22 Мая, 2019 - 05:06:37 - перейти к сообщению
Извините, но я иногда не с первого раза понимаю)
(Добавление)
 Kibor пишет:
Правильно, это выделять достаточно памяти для строки.
ну, тогда не 10, а 255?
(Добавление)
CODE:
char c[255];//это буфер для текста 255 байт для всего текста
char b[10];//нужно взять 10 символов из всего текста
string s="123456789089890";//текст
strcpy(#c[0], s);
messagebox (format(#c[0]));
43. Zireael - 22 Мая, 2019 - 05:18:27 - перейти к сообщению
 Цитата:
нужно взять 10 символов из всего текста

CODE:
char c[11];

string s="123456789089890";//текст
string ss;
if(regexsearch(1, #ss, s, ".{1, 10}"))
{
strcpy(#c[0], ss);
messagebox (format(#c[0]));
}
44. 007wan - 22 Мая, 2019 - 05:39:46 - перейти к сообщению
Спасибо. Проблема была вообще в другом.
45. Kibor - 27 Июля, 2019 - 14:34:41 - перейти к сообщению
Пример парсинга JSON структуры для поиска в ней данных по названию:

К примеру есть структура
CODE:
{"error":"not error","balance":5.36804,"id":12}


Необходимо узнать данные по любому элементу.

CODE:
string fr="{"+formatic(34)+"error"+formatic(34)+":"+formatic(34)+"not error"+formatic(34)+"," + formatic(34)+"balance"+formatic(34)+":5.36804,"+formatic(34)+"id"+formatic(34)+":12}";
messagebox (fr);

string find="balance";//Что ищем


if (find_JSON(fr, #find))//Если вернула 1
{
messagebox (find);//Выводим результат
}



function find_JSON(string json, string #find)
{
string res;
find=formatic(34)+find+formatic(34)+":";
if (regexsearch(1, #res, json, "(?<="+find+")(\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")(\d+.\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+.\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+formatic(34)+")(.*)+(?="+formatic(34)+"[,}])")==1) {find=res; return 1;}
return 0;
}
46. Zireael - 27 Июля, 2019 - 14:56:00 - перейти к сообщению
 Цитата:
(\d+)

Скобки не нужны, ссылка на подгруппу не используется, а возврат подгрупп не реализован (неплохо бы этого доделать).
CODE:
if (regexsearch(1, #res, json, "(?<="+find+")(\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")(\d+.\d+)(?=[,}])")==1) {find=res; return 1;}
if (regexsearch(1, #res, json, "(?<="+find+")([-+]+\d+.\d+)(?=[,}])")==1) {find=res; return 1;}

Тоже самое:
CODE:
if (regexsearch(1, #res, json, "(?<="+find+")[-+]*\d+(\.\d+)*")==1) {find=res; return 1;}
47. Kibor - 27 Июля, 2019 - 15:58:43 - перейти к сообщению
А как будет выглядеть регулярка учитывая что около символов
:
,
{
}
могут быть пробелы неизвестное количество?
48. Zireael - 27 Июля, 2019 - 17:04:02 - перейти к сообщению
 Цитата:
могут быть пробелы неизвестное количество?

\s* - означает 0 или больше пробелов. Точнее не только пробелов, \t \r \n тоже. Если нужен именно пробел, то ' *'.
Важно:
 Цитата:
(?<=тут нельзя использовать квантификаторы * и +)
(?=тут можно)

CODE:
string s=", "+"123"; // с пробелами
messagebox(s);

// если пробела нет, то найдёт '123'
// если есть, то ' 123', т. е. пробелы тоже будут
if(regexsearch(1, #s, s, "(?<=,)\s*\d+"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s))); // пробелы нужно удалять отдельно

s=","+"123"; // без пробела
if(regexsearch(1, #s, s, "(?<=,)\s*\d+"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s)));



s="123"+" }"; // с пробелами
messagebox(s);
if(regexsearch(1, #s, s, "\d+(?=\s*})"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s))); // пробелы не попадут в результат
s="123"+"}"; // без пробела
if(regexsearch(1, #s, s, "\d+(?=\s*})"))messagebox("Найденный текст: "+s+", длина текста: "+format(size(s))); // пробелы не попадут в результат


Если добавить возможность возвращать текст из подгрупп (то что в скобках), то можно не использовать (?<=) и (?=). Т. е. для строки ", 123" регулярка ",\s*(\d+)". Соответственно вернуть всё что нашлось, а отдельной функцией, по типу regexstart, вернуть текст, который находится в скобках. Скорее всего в библиотеке это должно быть.
50. ivantu - 26 Сентября, 2019 - 08:44:39 - перейти к сообщению
Друзья подскажите пожалуйста, как из строчки удалить все, кроме точного вхождения слова к примеру:

Клоун показывает фокус // Найдет слово
Шили форму // Тут не должен найти

я пытался так:
CODE:
regexreplace(-1, #text, text, "[^\фокус]", "");


как правильно подскажите.

Powered by ExBB FM 1.0 Final