Код:
if pos('кот', memo.text) <> 0 then ... (удаление, копирование, прочее).
Код:
pos ('что', 'где'); //пример: pos('кот', memo1.text);
copy ('где', i, n); // где i - позиция символа, с которого начинать копирование, а N - количество символов
delete ('где', i, n); //аналогично с предыдущим, но уже удаляет заданное кол-во символов
length (string); //где string - переменная типа String. Функция возвращает количество символов переданного ей слова/текста
Код:
var s, st: string;
begin
s:= memo1.text;
delete(s, pos('кот', s)+3, length(s) );
st:= copy(s, pos('кот', s), length(s) );
end;
Теперь рассмотрим первую фишку, которая поможет тебе спарсить, например, все слова между какими-либо символами. За исходный текст возьмём исходный код какого-либо сайта, а парсить будем все ссылки. Ссылки у нас обычно между чего? Между кавычками, начинается с <a href=", а заканчивается "/> (пример: <a href=''ссылка"/>). Т.е. видим, что ссылка между 2-мя символами (набором символов). Нужно её оттуда достать. Для работы нам нужна библиотека regExpr. Скачать её можно будет в конце статьи.
Что такое регулярные выражения? Это некоторые выражения, которые позволяют указать, откуда и что вырывать. Пишутся они на специальном синтаксисе, который понять совсем не сложно.
Установили библиотеку, после чего в uses пишем RegExpr, а в Var создаём переменную reg: TregExpr; (тип регулярных выражений). Ну и пошли рассматривать пример:
Код:
var reg: TregExpr;
begin
reg:= TregExpr.Create; //Инициализируем переменную
reg.InputString:= memo1.text; //InputText - текст, в котором будем искать условия, удовлетворяющие регулярке
reg.Expression:='href="(.*?)"'; //регулярное выражение
if reg.Exec(memo1.text) then //Если найдено совпадение в memo1, то
repeat
memo2.lines.add(reg.Match[0]); добавляем в memo2 строку с совпадением
until not reg.ExecNext; //и так пока не закончатся совпадения (reg.NextExec - следующее совпадение)
end;
Инициализация, я надеюсь, понятна. Так же как и свойство InputText, отвечающее за текст, в котором будем искать ссылки. Текст мы выгрузили в него из memo1.
Далее самое интересное, сама регулярка. Задание регулярки берёт на себя свойство Expression.
Мы видим, что в регулярном выражении я указал следующее:
Код:
reg.Expression:='href="(.*?)"';
Код:
<a href=" - символы, с которых начинается ссылка
"> - символы, которыми она заканчивается. А вот загадочное (.*?) означает ЛЮБОЕ выражение, заключённое между этими символами. Вот если регулярка сработает на нём в тексте, то данное выражение ложится в свойство Match[0]. Где 0 -1-ое совпадение. Это не значит, что если в тексте будет вторая ссылка, то она ляжет в match[1], нет. Это значит, что всё, что попадёт под первое условие регулярки, будет лежать в [0].
Если, например, мы дополним запрос на такой:
reg.Expression:='href="(.*?)"(.*>)a'; , то второе условие - будет вот: "(.*>)a. Всё, что на нём сработает, будет находится в reg.match[1].
Проще говоря, сколько (.*?), сколько и условий. Ну что, теории достаточно? Проверим на практике.
Ну и вставляем весь тот код, что был оговорён выше:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var reg: TregExpr;
begin
reg:= TregExpr.Create;
reg.InputString:= memo1.text;
reg.Expression:='href="(.*?)"';
if reg.Exec then
repeat
memo2.lines.add(reg.Match[0]);
until not reg.ExecNext;
end;