Доброго времени суток форумчане! помогите плиз составить функуию парсинга друзей. сам принцип понимаю. но сделать немогу. получается выдрать только первый ид: //s= фриендс аякс пхп int start; int end; start=s.Pos("["); // нахождение начала end=s.Pos(","); // нахождение конца Memo1->Lines->Add(s.SubString(start,end-start)); как заставить Pos продолжить идти дальше? наверно тут нужен какой то цикл, но я его немогу составить ( т.к. знаний еще маловато. как бы нужно заточить под C++ Builder
PHP: if(sPage.Pos("'friends':[")) { sPage.Delete(1, sPage.Pos("'friends':[") + 11 - 1); while(sPage.Pos("[")) { sPage.Delete(1, sPage.Pos("[")); sFriend = sPage; sFriend.SetLength(sFriend.Pos(",") - 1); FriendList->Add(sFriend); } } Смотри тут - http://vkontakte.ru/friends_ajax.php
Фрагмент кода из моего проекта. Написан на дельфи, но принцип поймешь. Code: S:='id='+FUserID+'&filter=all'; HTTP.Headers.Add('Referer: http://vkontakte.ru/friends.php?id='+FUserID); HTTP.Headers.Add('X-Requested-With: XMLHttpRequest'); HTTP.Document.Write(S[1], Length(S)); HTTP.MimeType:='application/x-www-form-urlencoded'; HTTP.HTTPMethod('POST', 'http://vkontakte.ru/friends.php'); Response.LoadFromStream(HTTP.Document); R.Expression:='\[(\d*?),"(.*?)","http'; if R.Exec(Response.Text) then repeat M:=TVkWallFriend.Create; M.FFriendId:=R.Match[1]; M.FFriendName:=R.Match[2]; Self.Add(M); until not R.ExecNext;
BrainDeaD это AnsiString ) M_script большое прибольшое спасибо! опять вы меня выручили ушел разбиратцо )
Зачем использовать регулярки там, где в них нет необходимости? Большинство задач легко и удобно решается с помощь методов AnsiString
в данном случае ни о какой гибкости речи не идёт. стояла конкретная задача, которая была решена наиболее рациональным способом. о пользе регулярок никто не спорит, но их исползование должно быть оправданым.