Pogčedajte punu verziju : Regexp: Upomoć!
Dušan Dželebdžić
16. 08. 2007., 23:04
Imam zadatak da gomilu teksta (15 brojeva časopisa, svaki po 300 strana) iz PDFa prebacim u wordpress. PDFovi su spremani za štampu, tako da uredno imaju line break na kraju svakog reda.
Svaki članak posebno prebacujem u editor (u mom slučaju Ultra Edit), i propuštam ga kroz dva makroa koja sam za ovu priliku sklepao: jedan za konverziju YUSCII->Unicode, i drugi koji preko regexpa prvo skloni sve crtice sa kraja reda, a onda ubija nepotrebne line-breakove:
^(.*[^.])\p
ili u prevodu: Spajamo sve redove koji nemaju tačku na kraju, u veseloj nadi da nećemo napraviti previše dodatnih pasusa.
Sve je sjajno radilo, sve dok nisam primetio da u delovima nekih članaka moraju da postoje linebreakovi, jer se radi o stihovima ili dijalozima. Izmenio sam malo string za pretragu, tako da spaja redove jedino ako imaju preko 50 karaktera:
^(.{50,}[^.])\p
ali UltraEdit uporno odbija da pronađe bilo šta sa ovim stringom. Sad sam se zaglupeo od previše pokušaja, i verovatno previđam očigledno - tu vi stupate na scenu :)
borstale
16. 08. 2007., 23:51
Samo da izrazim svoje oduševljenje načinom na koje je pitanje formulisano :)
ivanhoe
17. 08. 2007., 06:03
nije pametno baviti se regexpima posle beer festa, ali ajd da probam :)
a) da li UltraEdit podrzava {} sintaxu? Textpad ne podrzava...
b) probaj da umesto {50,} stavis {1,} da vidis da li ces dobiti nesto. Ako je ovaj matching line oriented, mozda su linije krace od 50 ili tako nesto glupo...
c) \p je oznaka za unicode(ali ide ispred izraza, ne iza), ja bih ocekivao da ces koristiti \r\n ili \s+ na tom mestu da uhvatis novu liniju
Br@nkoR
17. 08. 2007., 13:44
Možda:
^(................................................ ...*[^.])\p
:D
Dušan Dželebdžić
17. 08. 2007., 18:25
@borstale:
:D
@ivanhoe:
Probao sam sa + i {1,}, da vidim da li će dati isti rezultat. Ovo drugo nije uhvatilo ništa, tako da je vrlo verovatno da UEdit ne konta ovakve brojače. Ono što me je zabrinulo je to što search string sa plusom umesto zvezdice daje jako čudne rezultate (hvata cele redove, ali samo one posle kojih stoje dva cr/lf-a).
Za \p sam znao da hvata blokove unicode karaktera, pa me je iznenadio UltraEditov help, koji za \p kaže:
\p: Matches CR/LF (same as \r\n) to match a DOS line terminator.
Ali posle ove zanimacije sa quantifierima, ne bih se začudio kad bih saznao da ovo pravilo važi samo u UEditu.
@Br@nkoR:
Stari, dobri buzdovan-metod. Izgleda šašavo, ali deluje! :1090:
Hvala, ko zna kad bi mi ovako nešto palo na pamet :)
Dušan Dželebdžić
17. 08. 2007., 22:47
Prerano sam se poradovao, ovo je sredilo jedan problem, ali je kasnije stvorilo nekoliko novih. Koji mi editor za Win preporučujete, a da ima osnovnu podršku za makroe, i da podržava standardnu sintaksu regexpa?
MorenoArdohain
17. 08. 2007., 22:51
Perl :)
Nije editor ali ce odlicno raditi :)
dinke
18. 08. 2007., 02:56
How about textpad (http://www.textpad.com)?
ivanhoe
18. 08. 2007., 06:30
How about textpad (http://www.textpad.com)?
textpad koristim godinama, ali on ume da sjebe UTF8 karaktere i milion drugih gluposti da napravi (recimo regexpi ne podrzavaju .+? (najkraci matching))...
Mozda Scite kao predlog editora, on deluje kao da radi lepo, mada se slazem sa Morenom, instaliraj perl ili php cli i napravi skriptu koja radi sta god pozelis, jebes editore i makroe...
recimo za perl, one-liner je nesto tipa
perl -p -i.BCKP -e "s/search_term/replace_term/gi" neki.fajl
Dušan Dželebdžić
20. 08. 2007., 01:43
Izgleda da sam bio u pravu kad sam temu prvobitno postavio u PHP forum :)
Pretpostavljam da je perl bolje rešenje, ali o njemu znam jedino da ima "mačka mi skočila na tastaturu" sintaksu, tako da će biti efikasnije ako posao odradim u PHPu. Hvala svima na savetima.
ivanhoe
20. 08. 2007., 02:29
Pretpostavljam da je perl bolje rešenje, ali o njemu znam jedino da ima "mačka mi skočila na tastaturu" sintaksu
ma isti djavo, perl samo ima ugradjene mehanizme da se poziva iz komandne linije kao one-lajneri...
kao sto je buda govorio, svako treba da se drzi svoje omiljene macke :)
vBulletin® v3.6.8, Copyright ©2000-2009, Jelsoft Enterprises Ltd.