Есть строка ["Текст1"],["Текст2"],["Текст3"] из неё нужно получить Текст1,Текст2 и Текст3 у меня получается только Текст1 спарсить до остального хз как добраться.Каким циклом нужно воспользоваться?
Подскажите какой язык, какими средствами можно пользоваться. Пример C#: Code: string pattern = @"\[\"(.*?)\"\]" Regex rgx = new Regex(); MatchCollection mtchCol = rgx.Matches(); foreach(Match mt int mtchCol) MessageBox.Show(mt.Groups[1].Value);
С++ Builder PHP: TStringList* sl = new TStringList; String s = "[\"Текст1\"],[\"Текст2\"],[\"Текст3\"]"; while(s.Pos("[")) s.Delete(s.Pos("["), 1); while(s.Pos("]")) s.Delete(s.Pos("]"), 1); sl->CommaText = s; sl->Strings[0] == Текст1 sl->Strings[1] == Текст2 sl->Strings[2] == Текст3
Как-то так: Code: function GetValue(s:string; ValNum:integer):string; var str:string; i,p:integer; begin str:=s; for i:=1 to ValNum do begin p:=pos('["', str); delete(str, 1, p+1); end; p:=pos('"]', str); GetValue:=copy(str, 1, p-1); end; Первым параметром передаешь строку, которую распарсить, вторым - номер значения, которое получить.
ТС, ты не указал какой набор символов может быть в Текс1, Текст2 и т.д. Если запятые не присутствуют, то можно было бы строку "разрезать" на части, разделяющиеся символом ",". Code: type TStringArray = array of String; procedure Parse(Const Text : String; var Texts : TStringArray); Var i : Integer; Const Align = 10; function FindNextSubStr(SubStr : String) : Integer; Var j, k : Integer; Begin k := 1; for j := i to Length(Text) do if Text[j] = SubStr[k] then Begin if k >= Length(SubStr) then Begin Result := i - Length(SubStr) + 1; Exit; end; Inc(k); end else k := 1; Result := 0; end; Var a, b, s : Integer; Begin s := 0; i := 1; SetLength(Texts, 0); try while i <= Length(Text) do Begin //Определяем начало и конец области a := FindNextSubStr('["'); if a = 0 then Exit; i := a + 2; b := FindNextSubStr('"]'); if b = 0 then Exit; //Добавляем в массив if High(Texts) < s then SetLength(Texts, High(Texts)+Align+1); Texts[s] := Copy(Text, a+2, b-a-1); Inc(s); i := b + 2; end; finally SetLength(Texts, s); end; end;
Лучше использовать регулярки. Если Дельфи, то примерно так: PHP: RegExp.Expression := '\[(^\]*)\]'; RegExp.Exec(str); pereat text[i] := RegExp.match[1]; inc(i); until not RegExp.ExecNext;