Новые Функции regexsearch и regexreplace регулярных выражений тут.
Ниже проще работающие, но не актуальные.
findtext - производит поиск подстроки заключенной между двумя указанными блоками текста. Либо от первого указанного блока до конца текста.
replacetext - производит поиск и замену подстроки.
deletetext - позволяет найти и удалить с текста указанные блоки текста или отдельные символы.
=========================================================================================
Пример findtext:
CODE:
string TEXT="В этом тексте нам необходимо найти <-!это слово! и {такое тоже}. Поиск по тексту.";
char CTEXT[1000];
int nom, tnom=0;
int siz;
strcpy(#CTEXT[0], TEXT);
tnom=0;
loop()
{
if (findtext(#CTEXT[tnom], #nom, #siz, "<-!" & "!" | '{' & '}')==-1) goto er;
messagebox("Позиция от начала массива "+format(tnom+nom) + ". Длина найденного фрагмента "+format(siz) + ". Найдена фраза: "+format(#CTEXT[tnom+nom], siz));
tnom=tnom+nom;
}
er:;
char CTEXT[1000];
int nom, tnom=0;
int siz;
strcpy(#CTEXT[0], TEXT);
tnom=0;
loop()
{
if (findtext(#CTEXT[tnom], #nom, #siz, "<-!" & "!" | '{' & '}')==-1) goto er;
messagebox("Позиция от начала массива "+format(tnom+nom) + ". Длина найденного фрагмента "+format(siz) + ". Найдена фраза: "+format(#CTEXT[tnom+nom], siz));
tnom=tnom+nom;
}
er:;
Синтаксис:
1 параметр указатель на одномерный массив char в котором находится текст. Данный массив текста должен обязательно заканчиваться 0.
Если текст в массив копируется с помощью функции strcpy, 0 в конце ставится автоматически. Размер массива должен быть на 1 больше количества символов.
2 указатель на переменную int в которую запишется номер символа с которой начинается искомая фраза. Номер считается от начала поиска в массиве char.
То есть если поиск начинался с указателя
#CTEXT[100], то номер символа считается с сотого элемента массива CTEXT.
3 Указатель на int в который запишется длина найденной подстроки.
4 Данные параметры указывают между какими блоками происходит поиск.
Синтаксис:
"<-!" & "!"
Будет найден текст между <-! и !. Допускается тип string или char
Данные блоки можно комбинировать таким образом:
"<-!" & "!" | '{' & '}'
Данная запись означает что будет найден текст между
(<-! найденный текст !) ИЛИ ({ найденный текст })
Функция findtext возвращает
1 если текст найден между обоими блоками
0 если текст найден от первого блока и до конца текста
-1 текст не найден
Использовать данную функцию следует в цикле. За один вызов она возвращает один найденный фрагмент.
Для поиска следующего необходим повторный вызов функции с указанием смещения в указателе на массив char.
Еще пример поиска в тексте конкретно указанной фразы. В этом случае вторым блоком указываем пустую строку:
CODE:
string TEXT="В этом тексте нам необходимо найти <-!это слово! и {такое тоже}. Поиск по тексту.";
char CTEXT[1000];
int nom, tnom=0;
int siz;
strcpy(#CTEXT[0], TEXT);
//До искомого блока
tnom=0;
loop()
{
if (findtext(#CTEXT[tnom], #nom, #siz, "<-!" & "")==-1) goto er;
messagebox("Позиция от начала массива "+format(tnom+nom-size("<-!")) + ". Длина найденного фрагмента "+format(siz+size("<-!")) + ". Найдена фраза: "+format(#CTEXT[tnom+nom-size("<-!")], siz+size("<-!")));
tnom=tnom+nom;
}
er:;
//После искомого блока
tnom=0;
loop()
{
if (findtext(#CTEXT[tnom], #nom, #siz, "<-!" & "")==-1) goto er1;
messagebox("Позиция от начала массива "+format(tnom+nom) + ". Длина найденного фрагмента "+format(siz) + ". Найдена фраза: "+format(#CTEXT[tnom+nom], siz));
tnom=tnom+nom;
}
er1:;
char CTEXT[1000];
int nom, tnom=0;
int siz;
strcpy(#CTEXT[0], TEXT);
//До искомого блока
tnom=0;
loop()
{
if (findtext(#CTEXT[tnom], #nom, #siz, "<-!" & "")==-1) goto er;
messagebox("Позиция от начала массива "+format(tnom+nom-size("<-!")) + ". Длина найденного фрагмента "+format(siz+size("<-!")) + ". Найдена фраза: "+format(#CTEXT[tnom+nom-size("<-!")], siz+size("<-!")));
tnom=tnom+nom;
}
er:;
//После искомого блока
tnom=0;
loop()
{
if (findtext(#CTEXT[tnom], #nom, #siz, "<-!" & "")==-1) goto er1;
messagebox("Позиция от начала массива "+format(tnom+nom) + ". Длина найденного фрагмента "+format(siz) + ". Найдена фраза: "+format(#CTEXT[tnom+nom], siz));
tnom=tnom+nom;
}
er1:;
======================================================================================================================
Пример replacetext:
"<-!" Удалится, так как второй блок, которым заменять имеет пустую строку
"{" заменится на "EEEEE"
CODE:
string TEXT="В этом тексте нам необходимо заменить<-!это слово! и {такое тоже. Поиск по тексту.";
char CTEXT[1000];
int nom=0, tnom=0;
strcpy(#CTEXT[0], TEXT);
loop()
{
if (replacetext(#CTEXT[tnom], #nom, "<-!" ~ "" | '{' ~ "EEEEE")==0)goto er;
tnom=tnom+nom;
messagebox(format(tnom)+" "+format(#CTEXT[0]));
}
er:;
char CTEXT[1000];
int nom=0, tnom=0;
strcpy(#CTEXT[0], TEXT);
loop()
{
if (replacetext(#CTEXT[tnom], #nom, "<-!" ~ "" | '{' ~ "EEEEE")==0)goto er;
tnom=tnom+nom;
messagebox(format(tnom)+" "+format(#CTEXT[0]));
}
er:;
Синтаксис:
1 параметр указатель на одномерный массив char в котором находится текст. Данный массив текста должен обязательно заканчиваться 0.
Если текст в массив копируется с помощью функции strcpy, 0 в конце ставится автоматически. Размер массива должен быть на 1 больше количества символов.
2 указатель на переменную int в которую запишется номер символа следующего за заменившей фразой. Номер считается от начала поиска в массиве char.
То есть если поиск начинался с указателя
#CTEXT[100], то номер символа считается с сотого элемента массива CTEXT.
3 Данные параметры указывают какие блоки будут заменены и чем.
Синтаксис:
"<-!" ~ "!"
Будет найден текст <-! и заменен на !. Допускается тип string или char
Данные блоки можно комбинировать таким образом:
"<-!" ~ "!" | '{' ~ '}'
Данная запись означает что будет найден и заменен текст
(<-! на !) ИЛИ ({ на })
Функция replacetext возвращает
1 если текст найден и заменен
0 текст не найден
Использовать данную функцию следует в цикле. За один вызов она возвращает один замененный найденный фрагмент.
Для замены следующего необходим повторный вызов функции с указанием смещения в указателе на массив char.
======================================================================================================================
Пример deletetext:
CODE:
string TEXT="В этом тексте нам необходимо удалить слова жвачка и вирус. Удаление слов вирус жвачка.";
char CTEXT[1000];
strcpy(#CTEXT[0], TEXT);
messagebox(format(#CTEXT[0]));
deletetext(#CTEXT[0], "жвачка" | "вирус");
messagebox(format(#CTEXT[0]));
char CTEXT[1000];
strcpy(#CTEXT[0], TEXT);
messagebox(format(#CTEXT[0]));
deletetext(#CTEXT[0], "жвачка" | "вирус");
messagebox(format(#CTEXT[0]));
Синтаксис:
1 параметр указатель на одномерный массив char в котором находится текст. Данный массив текста должен обязательно заканчиваться 0.
Если текст в массив копируется с помощью функции strcpy, 0 в конце ставится автоматически. Размер массива должен быть на 1 больше количества символов.
Удаление происходит начиная от указанного индекса массива.
2 Удаляемые блоки текста. Допускается string или char.
Данные блоки можно комбинировать
"жвачка" | "вирус"
и так далее.
Возвращает количество удаленных блоков.