დიდი ხნის პაუზის შემდეგ მინდა წარმოგიდგინოთ ერთი ახალი პროექტი რომელზეც გარკვეული პერიოდია ვმუშაობ. ჯერჯერობით ეს არის პრივიუ რელიზი რომელიც მალე საბოლოო ფაზაში შევა და სრულ დოკუმენტაციასა და მაგალითებს შესაბამისად წარმოგიდგენთ. მანამდე კი მისი ნახვა და გადმოწერა შეგიძლიათ შემდეგი მისამართიდან: STL Library.
რა არის STL? როგორც სათაურმა მიგანიშნათ ეს არის PHP – ზე დაწერილი მარტივი და მოქნილი შაბლონების ენა და ამ ენის პროცესორი. STL არის მარტივად გამოყენებადი შაბლონების ენა რომელიც არის საკმაოდ მარტივად ასათვისებელი თუ თქვენ გაგაჩნიათ ნებისმიერ მსგავს შაბლონების ენასთან სულ მცირედი მუშაობის გამოცდილებაც კი. მისი სინტაქსი წააგავს Django, Jinja2, Smarty და სხვა მსგავსი შაბნოლენბის ენებს.
ბიბლიოთეკას არ აქვს არანაირი დამოკიდებულება სხვა გარე ბიბლიოთეკებზე და PHP – ს სპეციფიურ მოდულებზე. კი არის სრულად ე.წ. standalone და მისი გამოყენება შეგიძლიათ ნებისმიერ PHP პროექტში.
რა არის საჭირო მისი გამოყენებისთვის? სულ მცირედი: 1) თქვენს პროექტში უნდა ჩატვირთოთ stl.lib.php რომლის გადაწერაც შეგიძლიათ ზემოთ მითითებული მისამართიდან; 2) შექმნათ შაბლონი ნებისმიერ ტექსტურ ფორმატში(html, txt, xml და ა.შ); 3) შექმნათ STL_template კლასის ობიექტი, გადასცეთ მას საჭირო ტექსტური შაბლონი და კონტესტური ცვლადები და შეასრულოთ. სულ ეს არის და ეს. როგორ? მაგალითი იხილეთ ქვემოთ:
HTML შაბლონი – test.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
ნაჩვენები შაბლონის მეშვეობით ხდება სტუდენტებისა და შესაბამისად ცალკეული სტუდენტის მეგობრების სიის გამობეჭდვა. ქვემოთ ნაჩვენებია შაბლონის ინიციალიზაციის კოდი:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //შაბლონის ობიექტის შექმნა $tpl = new STL_template('test.html', true); //შაბლონში მონაცემების დამატება $tpl->put('students', array( array( 'name' => 'John', 'friends' => array( array( 'name' => 'Ann' ), array( 'name' => 'Suzan' ), array( 'name' => 'Tom' ) ) ), array( 'name' => 'Tom', 'friends' => array( array( 'name' => 'David' ), array( 'name' => 'Mary' ) ) ) )); //შაბლონის პროცესინგი, შესრულება და გამობეჭდვა echo $tpl->process(); |
ნაჩვენები კოდის შესრულების შედეგად მიიღებთ სურათზე ნაჩვენებ შედეგს:
რაც შეეხება თავად ენის სინტაქსს როგორც მაგალითიდან ჩანს იგი საკმაოდ მარტივია, თუმცა ყურადღებას შეფაჩერებ რამდენიმე დეტალზე.
if/elseif/else ოპერატორი
ეს არის ერთერთი ყველაზე ხშირად გამოყენებადი ოპერატორი და შესაბამისად მაქსიმუმი გავაკეთე იმისთვის რომ მისი გამოყენება მაქსიმალურად ეფექტურად იყოს შესაძლებელი. მაგალითში ნაჩვენები კოდის ფრაგმენტი “{if students}” უბრალოდ ამოწმებს არის თუ არა აღწერილი ცვლადი სახელით “students” და აქვს თუ არა მას მინიჭებული საწყისი მნიშვნელობა. თუმცა პირობა შესაძლებელია იყოს გაცილებით უფრო კომპლექსური. ქვემოთ ნაჩვენებია ამ ოპერატორის გამოყენების ნიმუშები:
1 2 3 4 5 6 7 | {if students && someOtherVariable=="some test value" || testValue in someCollection} Do something {elseif !students && !someOtherVariable} Do something else {else} UPS :D {/if} |
გარდა if/elseif/else ოპერატორისა ასევე შეგიძლიათ პოპულარული და უმნიშვნელოვანი foreach ოპერატორის გამოყენება, მაგ:
1 2 3 | {for student in students} %student.name% {/for} |
ნაჩვენებ მაგალითში მოხდება “students” კოლექციის იტერაცია ხოლო ყოველი მომდევნო ელემენტის ახალ “student” ცვლადზე მინიჭება. მოგვიანებით კი შეგიძლიათ ახალი “student” ობიექტისა და მისი თვისებების გამოყენება.
ცვლადების გამობეჭდვა ხდება სპეციალური ფორმატის მეშვეობით, კერძოდ კი ცვლადი უნდა განათავსოთ პროცენტის(%) სიმბოლოებში.
ამ მომენტისათვის ასევე უკვე არსებობს ფუნქციების გამოძახების საშუალება, მაგალითში ნჩვენები ფრაგმენტი:
1 | {fn:ucfirst(strtolower(%student.name%))} |
ფრაგმენტიდან ჩანს რომ ხდება ორი ფუნქციის გამოძახება: 1) strtolower() PHP ფუნქცია რომელიც მნიშვნელობას გადაიყვანს ქვედა რეგისტრის სიმბოლოებში; 2) ucfirst PHP ფუნქცია რომელიც სტრიქონის პირველ სიმბოლოს გადაიყვანს ზედა რეგისტრის სიმბოლოში.
ასევე STL – ს აქვს მოდულების მხარდაჭერა თუმცა ამაზე ოდნავ მოგვიანებით შეგატყობინებთ პროექტის დარელიზების შემდეგ.
ამ მომენტისათვის სულ ეს არის, დოკუმენტაციასა და უფრო ვრცელ მაგალითებს შემოგთავაზებთ სულ მალე
ტეგები: PHP, RegExp, stl, template language

ასეთი პოსტების მერე სულ რამე საინტერესოს წერა მინდება
ბიბლიოთეკა, რაღა თქმა უნდა, მომეწონა
)
@Samurai girl
დიდი დიდი მადლობა
მერე რომ გინდება კარგი რამეების წერა უნდა წერო და გაგვიზიარო B-)
ქულ!
პერფორმანსის ამბავში როგორაა? შეადარე “ბაზრის ლიდერებს”?
და ტემპლეიტის კომპილირება/ქეშირებას არ აკეთებს? ანუ, ყოველ პროცესინგზე თავიდან არჩევს ტექსტს?
@Rocko
გაიხარე!
პერფორმანსი გეტყვი როგორ არის ახლავე, ესე იგი ამ პოსტში ნაჩვენები მაგალითის შესრულებას(იგულისხმება პარსინგიც და ევალუეიშენიც) სჭირდება ეს დრო:
Processing takes 0.002261 seconds
გაცილებით კომპლექსური ტემპლეიტების პარსინგი/პროცესინგი საშუალოდ მერყეობს 0.05/0.005 წამს შორის… ცხადია გააჩნია შაბლონის კომპლექსურობას…
მაგრამ აქ ვითვლი დროს ორივე ოპერაციისთვის, მაგრამ რეალიზაცია თავისთავად ისე მაქვს გაკეთებული რომ თვითონ პრეპროცესინგი(ანუ parsing) ხდება დამოუკიდებლად და ევალუეიშენი დამოუკიდებლად შესაბამისად პრეკომპილაცია გამზადებული ნოუდების შენახვა და მოგვიანებით საჭიროების მიხედვით ევალუეიშენი ჩვეულებრივი ამბავია. უფრო მეტიც პრეპროცესინგის მერე ნოუდების პირდაპირ JSON ფორმატში შენახვაც კი შეგიძლია და დატრანსფერება სხვაგან თუ დაგჭირდა…
მაგრამ ბენჩმარკები ასეთ ძრავებში ცოტა საჩოთირო თემაა იმიტომ რომ უამრავ ფაქტორზეა დამოკიდებული, თუმცა მაგასაც გამოვფენ მალე B-)
ამ ბიბლიოთეკის მთავარი ხიბლი ჩემთვის არის ის რომ შაბლონი ნებისმიერი სორსიდან შეგიძლია მიაწოდო და ნებისმიერ შემთხვევაში ერთნაირად მუშაობს, და რაც ყველაზე მეტად მეამაყება ტექსტ პროცესინგი სრულად RegExp – ებით მაქვს გაკეთებული(თუმცა ეგ ალბათ სორსიდანაც ჩანს) B-)
აჰა, ახლა გადავხედე სორსს, მშურს
ვერა და ვერ ჩავუჯექი რეგექსპს რა
@Rocko
მერე ჩაუჯექი
ერთი ბარიერის გადალახვა უნდა თავიდან და ეგ არის, მე თუ შევძლებ მცირე რჩევებს მოგცემ
ძალიან ძალიან მაგარია!!!
ახლა მივალ სამსახურში და სორსში უნდა ჩავიჭყიტო
@Jibla
გაიხარე! იმედია სორსიც მოგეწონება
ვააა, მშვენიერია, სორსს გავარჩევ აბა…
მე ვერა და ვერ მოვაბი თავი, ჩემი Framework-ის სააშკარაოზე გამოტანას
შენ სმარტის მსგავს მიდგომას იყენებ როგორც ერთი შეხედვით ჩანს, მე სხვა გზით წავედი, ვეცდები გაჩვენო ახლო მომავალში და მერე განვიხილოთ
P.S. ისე ერთი ლუდის და ლეპტოპების გარემოცვაში ამაღლებულ თემებზე საუბარი არ გვაწყენდა
კიდევ ერთი სმარტი დაწერე?
ჰეჰე, ეს ისე ჩორნი იუმორ. ხოდა სერიოზულად კი ძალიან გამიხარდა რო დავინახე რადგან სმარტის წონასთან ამას უზარმაზარი უპირატესობა აქვს, ეგ კიდე ძალიან, ძალიან კარგია.
ისე მე ვწერ ეხლა ერთი პროექტისთვის ფორმა-მშენს, ალბათ დავაოპენსირსებ და გაგიზიარებთ, თუ გამოვიდა შეგვიძლია დამერჯოთ კიდევაც და უფრო უნივერსალური ტიპიც გამოვა.
Great work mate, there is no other word, great
@Gode
გაიხარე
სორსი უნდა მოგეწონოს წესით საინტერესო ნიუანსები აქვს ჩემის აზრით
შენი ფრეიმვორკი უნდა დაიდოს! აუცილებლად, უპირობოდ და სასწრაფოდ!!
ლუდს და მაღალ იდეალებს ვეთანხები არ გვაწყენს ნამდვილად
@ტოტო
გაიხარე! შავი იუმორი მომეწონა
ისე Django – ს დავესესხე ბევრი რამ Smarty – სთან ყველაზე ნაკლები აქვს საერთო, ალბათ იმდენი რამდენიც ყველა ტემპლეიტ ენჯინს ერთმანეთთან
ზოგადად კარგი ის აქვს რომ სუფთა ტექსტ პროცესინგია და ამას ძალიან სწრაფად აკეთებს ანუ შაბლონების პრე-კომპილაცია აბსოლუტურად არააუცილებელი სტეპია… და კიდევ როგორც ზედა კომენტარებში აღვნიშნე სრულად Regexp based იმპლემენტაციაა რითიც უსაზღვროდ ვამაყობ :არათავმდაბალი სმაილი:
@ტოტო
ფორმა მშენს რაც შეეხება დაიდოს სორსები! რაც მეტი ოფენ სორს პროექტი იქნება გარშემო მითუკეთესი ჩვენთვის და საზოგადოებისთვის, ველით პროდუქტს!
სოსოს ბიბლიოთეკის მთავარი ღირსებაა კონცეპციის გამართულობა. STL-ი, ესაა, მთლიანად php და არა რომელიმე სხვა ენის ბიბლიოთეკის პორტი, php-ს თავისებურებების და ისტორიის გათვალისწინების გარეშე “გადმოთარგმნილი”.
@გიორგი
დიდი დიდი მადლობა! შენი შეფასება კომპლიმენტად მივიღე
მართლა მთელი ძალით ვეცადე რომ რაიმეს პირდაპირი პორტი არ გამეკეთებინა
ვაუ, ეს კიდე მომეწონაა
ციფრები ზუსტად აღარ მახსოვს და გილუს ტემპლეიტ პარსერზე უკეთესი დრო მოხსენი?
@zur4ik
მადლობა
დროის მოხსნას და ბენჩმარკებს რაც შეეხება, ზოგადად, შაბლონების პროცესინგის ბენჩმარკები ცოტა უცნაური თემაა და უკეთესი/უარესი ძალიან მრავალრიცხოვანი და მრავალფეროვანი ტესტ კეისების შედეგად შეიძლება დადგინდეს ასეთი ცალსახა პასუხი ამ თემაზე არ არსებობს.
ერთ-ერთი ადამიანი ვინც ქართულ ვებ-ტექნოლოგიურ განვითარებას ეხმარება და გვაწვდის საინტერესო რესურსებს. იოსებ კარგია და 10x.
zur4ik STL უფრო მობილური სტილია, ანუ მე Gilu Template parser-ი გავაკეთე კონკრეტული ამოცანისთვის და გააჩნია მხოლოდ ის ფუნქციები რაც CMS-ს სჭირდება თარგებთან სამუშაოდ
აქიდან გამომდინარე ნაკლებადაა დატვირთული ფუნქციონალურობით და არც იქნება გასაკვირი თუ უფრო სწრაფია ვიდრე TSL.
მე ვცდილობ იშვიათად გამოვიყენო RegEx სთრინგებთან სამუშაოდ და საკმაოდ პლიუსსაც მაძლევს პერფორმენსში.
ხალხო ვედზებ საუკეთესო პროგრამისტს ჩემი skype : pirania88_8
@ლუკა
დიდი მადლობა
თუმცა Regex – თან დაკავშირებულ პათოსს კატეგორიულად არ ვიზიარებ და მზად ვარ ნებისმიერი შედარება(ვგულისხმობ რეალურ ბენჩმარკებს) გავაკეთო წარმადობის კუთხით regex და არა regex ვერსიებს შორის
იოსებ, საინტერესო იქნება მე ვფიქრობ და თუ წინაარმდეგი არ ხარ გავაკეთოთ, არც ისე რთული საქმეა.
არ ვიცი იოსებ შენ რამდენად გიზიდავს პერფორმენსი და ზოგადად კოდის ოპტიმიზაცია (კოდის და არა პლატფორმების) მაგრამ მე უკვე მიზიდავს კი არა რაღაც მანიად მაქვს ქცეული
მაგალითად ავიღოთ ჩემი თიმფლეით პარსერი, ვერანაირად ვერ გადავაკეთებ regex-ის გამოყენებით ისე რომ პარსირების სისწრაფით აჯობოს ახლანდელს. დიდი არაფერია ეგ კლასი მაგრამ დაახლოებით7-8 ჯერ გადავაკეთე სანამ იმ შედეგს არ მივაღწიე რაც ამჟამადაა, თუმცა შეიძლება (შეიძლება კი არა ალბათ კი) უფრო ოპტიმალური ვარიანტიც არსებობს.
@ლუკა
გავაკეთოთ არ არის პრობლემა დაწერე რეალური ტესტ კეისები რა შემთხვევაში მიგაჩნია რომ regex – ის წარმადობა ნაკლები იქნება და გავაკეთოთ
დარწმუნებული ვარ რომ რასაც შენი პარსერი აკეთებს regex – ით არანაკლებ სწრაფი იქნება
იოსებ ნებისმიერ შემთხვევაში მიმაჩნია რომ regex-ით შესრულებული ამოცანა მეტ დროს წაიღებს ვიდრე გამოსახულებების გარეშე.
“ტესტ კეისები” ვერ მივხვდი რა არის ამიხსენი და დავწერ არაა პრობლემა.
phpunit არ გვინდა უბრალო მარტივი მაგალითით გავაკეთოთ.
იოსებ აი მარტივი მაგალითი http://pastebin.com/m6b699659
$data დან გამოაქვს მხოლოდ dolor
შენ როგორც გინდა ისე გადააკეთე regex-ით.
რამოდენიმეჯერ სწრაფია.
@ლუკა
ძალიან მარტივად და ზედაპირულად უყურებ საკითხს. საფუძველშივე არასწორად მსჯელობ. არ არის ტექსტ პროცესინგი ის საკითხი რომ მასე პრიმიტიულად მიუდგე
დავიწყოთ იმით რომ შენს კოდში შეცდომაა და არა რეგექსპ მეთოდი იმას არ ეძებს რასაც უნდა ეძებდეს და რასაც რეგექსპ მეთოდი ეძებს(ისე უნიტ ტესტები მსგავსი შემთხვევების აღმოსაფხვრელად მისწრებაა
)
მეორე ეგ ორი ფუნქცია რადიკალურად განსხვავებულად ჭრის ამოცანას:
1) preg_match_all იპოვნის ყველა შესაბამისობას და ამას გააკეთებს სწორად ხოლო შენს მიერ დაწერილი არა რეგექს ფუნქცია ამას აკეთებს მხოლოდ ერთი შესატყვისისთვის;
2) რეგულარული გამოსახულებები შეცდომებისადმი მდგრადია რასაც ვერ ვიყტვი შენს ფუნქციაზე აბა ასეთი რამე სცადე და $data ცვლადი შეცვალე მსგავის ტექსტით “<p>lorem Oooops</strong> ipsum <strong>dolor</strong> sit amet</p>” და მერე შეადარე შედეგები ერთმანეთს.
შენს მიერ დაწერილი ფუნქცია რომ გადავაკეთოთ ისე რომ მივუახლოვოთ რეგექსის მუშაობას(ანუ ეძებდეს ტექსტში ყველა შესაძლო დამთხვევავას) გაცილებით უარეს შედეგს მოვიღებთ.
ნახე აბა ეს: http://pastie.org/753434
ეს არის ერთი მარტივი მაგალითი, და დამერწმუნე რამდენ არგუმენტსაც მომიყვან შენი მიდგომის სასარგებლოდ რამდენადმე მეტ არგუმენტს დავდებ მის საწინააღმდეგოდ თან ისე რომ მოცემულ მაგალითს არ გავცდები :რეგექსპების ფანი სმაილიკი:
იოსებ თუ წაიკითხავთ ამას გამომეხმაურეთ ძმურად მაგალითად მაქ საიტი როგორ შეიზლება რო იმ საიტს იმეილი გაუკეთო ან კიდევ მაგის გაკეთებას თუ ვერ შევზლებ mail.ru ზე რაც ინფორმაცია მომივა როგორმე ჩემ საიტის პროგრამამ რო დაამუშაოს ეგეთი რამე არ არსებობს?? ესეთი რაგაცის გაკეთება მინდა მომხმარებელი აგზავნის იმეილზე ტელეფონით თავის სურათს და id ჩემი პროგრამა კი შესაბამის იდს მიაბავს სურათს ეგ კი ვიცი როგორ გავაკეთო მარა ის ვერ გავიგე მაილი როგორ მივაბა ჩემ საიტს და მერე მაილზე გამოგზავნილი ინფორმაცია საიტმა როგორ დაამუშაოს თუ რამეს მომიხერხებ არ დაიზარო ან დააკომენტარე უკეთესს იზამ თუ მაილზე გამომიგზავნი რამე ინფორმაციას geno8585@mail.ru წინასწარ მადლობათ.
იოსები ორ წუთში რაც მომაფიქრდა ეგ დავწერე.
საქმეც მაგაშია რომ აი ასეთ შედეგებს ვიღებ:
With Regex: Processing takes 0.966414 seconds
Without Regex: Processing takes 0.011309 seconds
Without Regex NEW: Processing takes 1.044945 seconds
მოდი მაშინ რო მოიცლი შენ დაწერე ნებისმიერი მაგალითი, ან მითხარი და მე გადავაკეთებ ჩემ პარსერს და დარწმუნებული ვარ იმაში რომ ვერასდროს ვერ მივიღებ regex-ით უკეთეს შედეგს (სისწრაფის მხრივ). ნუ პრინციპში მაგალითსაც გააჩნია, თუ regex-ის გამოყენება გარდაუვალია ასეთ შემთხვევებზე არ ამქვს საუბარი.
“შენს მიერ დაწერილი ფუნქცია რომ გადავაკეთოთ ისე რომ მივუახლოვოთ რეგექსის მუშაობას(ანუ ეძებდეს ტექსტში ყველა შესაძლო დამთხვევავას) გაცილებით უარეს შედეგს მოვიღებთ.”
ძაან ცუდი მაგალითი მოვიყვანე და იმიტომ. ყველა შესაძლო დამთხვევას არ უნდა ვიღებდე. აი ზუსტად ზევით ავღნიშნე ამის შესახებ რომ ასეთ მომენტებში regex-ის გამოყენება გარდაუვალია და ამაზე არ გედავები.
@ლუკა
პრობლემა რაშია იცი? რეგექსპები იმდენად მრავალფეროვანი პრობლემების გადაჭრის საშულებას იძლევა ერთი ხელის მოსმით, და რეალურად მაგ ყველა ნიუანსის გათვალისწინება ერთ კასტომ ფუნქციაში შეუძლებელია… წინააღმდეგ შემთხვევაში ყველა შესაძლო ვარიანტისთვის მოგვიწევს ფუნქციების წერა ან არსებულის გაუმჯობესება და ეს რენტაბელური არანაირად არ იქნება…
მე რაც დავწერე “მიახლოვებული” რეგექსპთან ეგ კიდევ უმრავ ნიუანსს არ მოიცავს რაც რეგექსის შემთხვევაში ნაგულისხმევად გვაქვს. და კიდევ რამდენიმე ძალიან მნიშვნელოვანი მომენტი:
1) რეგექს გამოსახულება კომპილირდება და ფუნქციის გამოძახებაზე PCRE – ს მისი ხელახალი კომპილაცია აღარ უწევს;
2) ე.წ. custom ფუნქციები შეიძლება სწრაფი იყოს ერთ კონკრეტულ შემთხვევაში მაგრამ არანაირად არ ნიშნავს რომ იგივენაირად იმუშავებს სხვა შემთხვევაში(მაგალითად 100ჯერ ან 1000ჯერ დიდი ტექსტი თუა დასამუშავებელი, და პლიუს ამას ტექსტის წყობა არ არის პროგნოზირებადი)
მე არ მაქვს ლაპარაკი იმაზე რომ არარეგექსპ მიდგომა უფრო სწრაფი არ არის, მაგრამ, ეს არ ნიშნავს რომ საერთო ჯამში უფრო მომგებიანია გინდა სისწრაფით, გინდა კოდის მხარდაჭერის ხარისხით, გინდა კოდის მოცულობით და ასე შემდეგ…
მაგიტომ მიწერია ზევით კომენტარებში რომ შაბლონების პროცესორის ბენჩმარკი უცნაური თემაათქო, ძალიან, ძალიან ბევრ ნიუანსს მოიცავს და ასეთი ერთი ხელის მოსმით და ასეთი მარტივი მაგალითებით რაიმე დასკვნის გაკეთება სრულიად შეუძლებელია.
რაც შეეხება მაგალითებს, ბლოგ პოსტში რომ მაგალითია ჩალაგებული for ციკლის აბა დაწერე მაგის პარსერი რეგექსპების გარეშე და მიაღწიე იგივე სიზუსტეს რაც STL – ში მაქვს? დამერწმუნე ძალიან გაგიჭირდება იგივე ხარისხის მიღწევა. ამაშია საქმე და არა ის რომ არარეგექსპ ვარიანტი ცალკეულ შემთხვევაში შესაძლებელია უფრო სწრაფი იყოს
და კიდევ მაგალითს რაც შეეხება, ელემენტარულად შენივე კოდიდან ავიღოთ:
<strong >dolor</ strong>
გამხსნელი ტეგის ბოლოში მეტობის ნიშნამდე არია(პრაბელი) და ასევე დამხური ტეგის სლეშის შემდეგ.. გადააკეთე აბა შენი კოდი ისე რომ ნებისმიერი ე.წ. whitespace სიმბოლო გაითვალისწინოს ტეგის სახელში?
ან უფრო მეტი დაამატე აბა ატრიბუტები მაგ strong ტეგს მაგალითად id=”dolorid” და class=”dolor-class” და შენი ფუნქცია მოარგე ამ ამოცანას… საერთო ჯამში ყველა ეგეთი ნუანსის გათვალისწინება იქამდე მიგიყვანს რომ ან საკუთარ რეგექსპ პარსერს დაწერ ან კიდევ არსებულს აღიარებ და მის გამოყენებას დაიწყებ
რა მაგალითებიც მოვიყვანე ერთი შეხედვით ელემენტარულია, მაგრამ ამ “ელემენტარულს” უსაშველოდ გიქცევს რეალობა როცა საქმე რეალურ და კომპლექსურ ამოცანებს შეეხება, მაგ დროს კი იოლას ვერ გახვალ მაგ არგუმენტით რომ ცალკეულ შემთხვევაში ეგეთი მიდგომა უფრო “სწრაფია” რადგან სისწრაფე ძალიან ფარდობითი ცნებაა იმ კომპლექსურობის ფონზე რაც რეალური ამოცანების გადაჭრისას გვხვდება.
@გენო
PHP – ს მეილთან სამუშაო ბიბლიოთეკა და ფუნქციები:
http://php.net/manual/en/book.imap.php
PHP – თი მსგავსი კლიენტის აგების ტუტორიალი:
http://ajaxian.com/archives/building-a-web-based-ajax-pop3-client
POP3 კლიენტის PHP რეალიზაცია სოკეტების მეშვეობით:
http://images.devshed.com/da/stories/AJAX_POP3/pop3_processor.zip
სტატია აღნიშნულ სკრიპტთან დაკავშირებით:
http://www.devarticles.com/c/a/XML/Take-AJAX-to-Your-Email-Inbox-Developing-a-Webbased-POP-3-Client/
PHP – ს საუკეთესო რესურსი:
http://www.php.net/manual/en/
დანარჩენ კომენტარებს კი წავშლი
@იოსები დიდი მადლობა გაიხარე
იოსებ, საიდან დავიწყო არ ვიცი
კი ყველაფერში გეთანხმები მაგრამ შენ სხვა გზას მიუყვები მე სხვას.
regex-ს ვიყენებ “კიდევოც” და მე კი არა მსოფლიო აღიარებს.
უბრალოდ ხაზს გასმით მინდა ვთქვა (რადგან აქ html ტეგები რატომღაც არ აისახება) ის რომ არსებობს მომენტები როდესაც შესაძლებელია ამოცანა შევასრულოთ regex გამოყენების გარეშე.
მანდ რა მაგალითიც მომიყვანე whitespac-ბზე, კი გეთანხმები ეგეთი გამონაკლისების თავიდან არიდება გარდაუვალია და მაგ custom ფუნქციით ვერ დავიჭერ ამ შემთხვევას და რომც დავიჭირო მაზოხიზმია.
მაგალითისთვის ავიღოთ ჩემი პარსერი, მანდ მხოლოდ ერთ ადგილას ვიყენებ regex. ტეგებს შორის ინფორმაციის დასაედიტებლად, სადაც უნდა გავითვალისწინო whitespace, newline სხავ დანარჩენისთვის ვცდილობ არ გამოვიყენოდა როცა ნამდვილად მჭირდება მაშინ მივმართო.
მშვენივრად ხო ასრულებს თავის ამოცანას?
თარგებს ხო პარსავს რავაც საჭიროა?
მეტი მაგ დალოცვილს არაფერი არ ევალება.
მოკლედ მართალია ამაზე კამათით შედეგს ვერ მივაღწევთ.
IMHO უბრალოდ regex უნდა გამოიყენო იმ შემთხვევაში როცა ის ნამდვილად გჭირდება.
@ლუკა
მესმის რასაც ამბობ, მაგრამ:
“მაგალითად ავიღოთ ჩემი თიმფლეით პარსერი, ვერანაირად ვერ გადავაკეთებ regex-ის გამოყენებით ისე რომ პარსირების სისწრაფით აჯობოს ახლანდელს.”
ამის საპირწონედ ეს ნახე: http://pastie.org/754869
იგივე შაბლონი მიეცი რაც შენს ბენჩმარკში გაქვს, ანუ ეს:
http://pastie.org/754872
და გამოყენება კი ასე უნდა:
http://pastie.org/754875
ამ საიტს დახმარების გვერდი ან პორუმ არ აქვს?