Когда я начинал изучение PHP, мне, после Delphi, понравилась одна функция - explode. Ее работа очень проста - разбить строку на подстроки. В Delphi, до этого, я делал примерно следующее:
var
sl: TStringList;
begin
sl := TStringList.Create;
try
sl.Text := 'str1, str2, str3, str4, str5';
sl.Delimiter := ',';
// тут обрабатываем sl.Items
finally
sl.Free;
end;
end;
Все бы хорошо, но... Что делать, если разделителей несколько? Например, как разбить такую строку:
language: russian; delphi, php, c++; Ivanov
и получить следующее:
language: russian
delphi
php
c++
Ivanov
Да, можно, конечно, разбить строку, а потом разбивать подстроки. Можно использовать регулярки. Но, как я уже писал - я противник использования, для таких случаев, регулярных выражений. Да и рекурсию/множество циклов использовать не люблю. И, как оказалось, не только я. В Delphi есть стандартная функция для разбиения строки на подстроки, совсем как в PHP
.
var
sl: TStringList;
begin
sl := TStringList.Create;
try
ExtractStrings([';', ','], [' '], 'language: russian; delphi, php, c++; Ivanov', sl);
// тут обрабатываем sl.Items
finally
sl.Free;
end;
end;
Данная функция описана в Classes (странно, что я не встречал упонимания о ней ни в форумах, ни в блогах, ни в статьях, кроме как тут):
type TSysCharSet = set of Char;
function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;
+4