DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Regular expression i htaccess (http://www.devprotalk.com/forumdisplay.php?f=41)
-   -   Regexp: Upomoć! (http://www.devprotalk.com/showthread.php?t=3373)

Dušan Dželebdžić 16. 08. 2007. 22:04

Regexp: Upomoć!
 
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:

Kôd:

^(.*[^.])\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:

Kôd:

^(.{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. 22:51

Off Topic: Samo da izrazim svoje oduševljenje načinom na koje je pitanje formulisano :)

ivanhoe 17. 08. 2007. 05: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. 12:44

Možda:
Kôd:

^(...................................................*[^.])\p
:D

Dušan Dželebdžić 17. 08. 2007. 17: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:
Citat:

\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. 21:47

Koji editor za Win?
 
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. 21:51

Perl :)
Nije editor ali ce odlicno raditi :)

dinke 18. 08. 2007. 01:56

How about textpad?

ivanhoe 18. 08. 2007. 05:30

Citat:

Originalno napisao dinke (Napišite 40584)
How about textpad?

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. 00: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.


Vreme je GMT +2. Trenutno vreme je 01:41.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.