Osaisiko joku vääntää mulle valmiin systeemin... On pitkä string $html mikä sisältää yhden saitin koko html-koodin mikä "echotaan" sitten viimeiseksi, ja siellä keskellä on kirjan ISBN numero (url:ssä). Tuosta kovanonnen ISBN numerosta tarttis saada kaikki välviivat pois.. Eli: .php?isbn=?951-20-6800-1 tarttis saada .php?isbn=?9512068001 muotoon
Miten paholainen... - merkkejä kun voi koodissa olla muualla tekstin joukossa. str_replace() ei onnaa. Mahdollista on laittaa ISBN numeron ympärille merkkausta, esimerkiksi [##isbn_alkaa_tässä##]951-44-6381-1[##isbn_loppuu_tässä##] jolla tuon ISBN-numeron paikan pitkässä stringissä pystyy löytämään, mutta onko helppoa konstia kohdistaa vaikka str_replace() tuohon kohtaan.
ISBN:t voi olla hiukka erilaisia..
951-9107-07-X
951-44-6381-1
951-662-921-0 ...
Noissa ISBN-numeroissa siis pitää tietääkseni olla nuo väliviivat aina kohdallaan, eli niitä on kolme, ja niiden ympärillä joko numeroita tai kirjaimia.. Homma tuoksuu siltä, että Regular expressionit voisi olla paras vaihtoehto. Se on vaan mulle selalista jargonia...
Regular expression tms. Pikku apua...
Xcode, Mac OS X Server sekä muuta hauskaa ja hyödyllistä
10 viestiä
• Sivu 1/1
-
- Viestit: 18040
- Liittynyt: 20.2.2004 klo 23.12
- Paikkakunta: Tampere
Regular expression tms. Pikku apua...
Viesti Kirjoittaja Jamac »
Alihankintana printtipuolen graafista materiaalia!
-
- Viestit: 16
- Liittynyt: 6.3.2006 klo 15.06
-
- Viestit: 18040
- Liittynyt: 20.2.2004 klo 23.12
- Paikkakunta: Tampere
-
- Viestit: 503
- Liittynyt: 6.10.2005 klo 23.58
- Paikkakunta: Joensuu
Viesti Kirjoittaja dev null »
Jonkinlaisen yhden rivin awk-hirviön kehittelin :
awk '"isbn=" { a=index($0,"isbn=?"); if (a>0) { s=substr($0,a,length($0)-a+1); for (k=0; k<3; ++k) sub("-","",s) ; print substr($0,1,a-1) s} else print $0 } !"isbn=" { print $0 }'
Sama selitettynä:
for-silmukan ja sub:n voisi korvata gsubilla, mutta ajattelin, että jos siellä on muitakin viivoja niin ei tule kuin kolme korvausta.
Käytännössä olettaa, että linkkien välissä on rivinvaihtoja, muutoin vain eka isbn=? saa korvaukset. Kokeiltu parilla merkkijonolla. Kattava testaus käyttäjän vastuulla. Bugikorjaukset tuohon alle.
awk '"isbn=" { a=index($0,"isbn=?"); if (a>0) { s=substr($0,a,length($0)-a+1); for (k=0; k<3; ++k) sub("-","",s) ; print substr($0,1,a-1) s} else print $0 } !"isbn=" { print $0 }'
Sama selitettynä:
Koodi: Valitse kaikki
awk
'"isbn=" { // Jos rivillä on tämä merkkijono
a=index($0,"isbn=?"); // Etsi sen alku.
if (a>0) {
s=substr($0,a,length($0)-a+1); // Ota merkkijono isbn=?:n alusta rivin loppuun.
for (k=0; k<3; ++k) sub("-","",s); // Tee kolme korvausta.
print substr($0,1,a-1) s // Printtaa alku ja loppu, jossa korvaukset.
} else print $0 // ? regexpissä vastasi kaikkea joten isbn=x ei löydy indexillä.
}
!"isbn=" { // Kaikki muut rivit, tulosta sellaisenaan.
print $0
}'
Käytännössä olettaa, että linkkien välissä on rivinvaihtoja, muutoin vain eka isbn=? saa korvaukset. Kokeiltu parilla merkkijonolla. Kattava testaus käyttäjän vastuulla. Bugikorjaukset tuohon alle.
-
- Viestit: 1014
- Liittynyt: 6.11.2004 klo 19.35
Re: Regular expression tms. Pikku apua...
Viesti Kirjoittaja nobu178 »
Ilmeisesti php:llä haluat hoitaa koko homman?
$str = preg_replace("(<div id="isbn">)(\w+?)-(\w+?)-(\w+?)-(\w+?)(<\/div>)", "$1$2$3$4$5$6", $str);
Ainakin perlillä homma näyttää hoituvan samanlaisella komennolla.
Jos on näin jaJamac kirjoitti: Mahdollista on laittaa ISBN numeron ympärille merkkausta, esimerkiksi [##isbn_alkaa_tässä##]951-44-6381-1[##isbn_loppuu_tässä##] jolla tuon ISBN-numeron paikan pitkässä stringissä pystyy löytämään,
tämä pitää paikkansa, eikö homma hoidu seuraavaan tyyliin?(div:t ja preg_replace-funktio ovat vaan esimerkkejä, en ole itse kokeillut koko juttua php:llä. Lisäksi escape-merkit voivat olla epätarkkoja):Jamac kirjoitti: Noissa ISBN-numeroissa siis pitää tietääkseni olla nuo väliviivat aina kohdallaan, eli niitä on kolme, ja niiden ympärillä joko numeroita tai kirjaimia..
$str = preg_replace("(<div id="isbn">)(\w+?)-(\w+?)-(\w+?)-(\w+?)(<\/div>)", "$1$2$3$4$5$6", $str);
Ainakin perlillä homma näyttää hoituvan samanlaisella komennolla.
-
- Viestit: 18040
- Liittynyt: 20.2.2004 klo 23.12
- Paikkakunta: Tampere
Viesti Kirjoittaja Jamac »
Tuo dev_null:n systeemi meni totaalisesti hilseen yli... Mutta pitää sitäkin tutki, kiitos!
Joo, eli alla on sorsakoodista "pala" missä tuo isbn-numero luuraa, php-koodissa tuo koko html-koodi on yhdessä muuttujassa, mikä tulostetaan selaimelle vasta lopuksi.
preg_replace on tosiaan se mitä ounailin itsekin, mutta kun tuo synatksi on 100% hakusessa, pitää tutkia tuota sun juttua.
Sisältö ko. saitille haetaan XML-tiedostosta, mikä parsitaan HTML:ksi XSLT tyylitiedoston kautta php:llä. Eli XML:ssä on <isbn>951-0-30625-8</isbn> jollin sen ympärille on ihan helppoa laittaa merkkaukset.
Muistaakseni XSLT tyylissäkin olisi mahdollista käyttää tuota regular expressioneja (?) mutta en osaa... Ja aika on kuitenkin kortilla. Konstilal tai toisellahan tuo jokatapauksessa onnistuu, vaikka katkaisemalla sorsakoodi string isbn:n etu ja takapuolelta ja nappaamalla se isbn siitä välistä, mihin str_replace('-', '', $html)... ja sitten taas stringi kokooon. Se olisi purkkaa mutta mutta ...
Joo, eli alla on sorsakoodista "pala" missä tuo isbn-numero luuraa, php-koodissa tuo koko html-koodi on yhdessä muuttujassa, mikä tulostetaan selaimelle vasta lopuksi.
preg_replace on tosiaan se mitä ounailin itsekin, mutta kun tuo synatksi on 100% hakusessa, pitää tutkia tuota sun juttua.
Sisältö ko. saitille haetaan XML-tiedostosta, mikä parsitaan HTML:ksi XSLT tyylitiedoston kautta php:llä. Eli XML:ssä on <isbn>951-0-30625-8</isbn> jollin sen ympärille on ihan helppoa laittaa merkkaukset.
Muistaakseni XSLT tyylissäkin olisi mahdollista käyttää tuota regular expressioneja (?) mutta en osaa... Ja aika on kuitenkin kortilla. Konstilal tai toisellahan tuo jokatapauksessa onnistuu, vaikka katkaisemalla sorsakoodi string isbn:n etu ja takapuolelta ja nappaamalla se isbn siitä välistä, mihin str_replace('-', '', $html)... ja sitten taas stringi kokooon. Se olisi purkkaa mutta mutta ...
Koodi: Valitse kaikki
<h3 class="kk_otsikko">Projekti nimeltä neitsyys</h3>
<div class="kk_tiedot_laatikko">
<span class="nettiarvostelu">NETTIESITTELY</span>
<h1 class="kk_tiedot">
<strong class="grotesk">Salla Simukka:</strong>
<em class="grotesk">Viimeiset</em><br/>WSOY 2005. 177 s.
</h1>
<a class="ostakirja" href="http://clk.tradedoubler.com/click?p=6406&a=921284&g=x&URL=http://www.bookplus.fi/product.php?isbn=951-0-30625-8">Osta esitelty kirja klikkaamalla tästä! (mainos)</a>
</div>
Alihankintana printtipuolen graafista materiaalia!
-
- Viestit: 1014
- Liittynyt: 6.11.2004 klo 19.35
Re: Regular expression tms. Pikku apua...
Viesti Kirjoittaja nobu178 »
Nyt ei ole valitettavasti aikaa paneutua tähän, mutta seuraavanlainen muunnos ajettuna silmukalla voisi hoitaa homman:
$str = preg_replace("(isbn=)(\w+?)-(\w+?)-(\w+?)-(\w+?)", "$1$2$3$4$5", $str);
Valitsin preg_replace-funktion lähinnä sen takia, että se on manuaalin mukaan perl-yhteensopiva, ts. periaatteessa noiden kirjoittamieni säännöllisten lausekkeiden pitäisi toimia preg_replace-funktiossa.
$str = preg_replace("(isbn=)(\w+?)-(\w+?)-(\w+?)-(\w+?)", "$1$2$3$4$5", $str);
Valitsin preg_replace-funktion lähinnä sen takia, että se on manuaalin mukaan perl-yhteensopiva, ts. periaatteessa noiden kirjoittamieni säännöllisten lausekkeiden pitäisi toimia preg_replace-funktiossa.
-
- Viestit: 18040
- Liittynyt: 20.2.2004 klo 23.12
- Paikkakunta: Tampere
Viesti Kirjoittaja Jamac »
Pikkuisen jouduin arvaamalla korjaamaan tuota, ja alkoi toimia
Eli hakupatternin alkuun ja loppuun / merkit, aluksi php herjasi Unknown modifier '('
Kattelin maniuaalista niin siellä oli tällainen esimerkki
ja päättelin että kokeillaanpa laittaa / merkit loppuun ja lakuun. Sitten alkoi toimia.
Nää Regular Expressionit tarttis opetella, sen verran tehokkaita ne on.
Koodi: Valitse kaikki
$html = preg_replace('/(isbn=)(\w+?)-(\w+?)-(\w+?)-(\w+?)/', '$1$2$3$4$5', $html);
Kattelin maniuaalista niin siellä oli tällainen esimerkki
Koodi: Valitse kaikki
$pattern = "/(\w+) (\d+), (\d+)/i";
Nää Regular Expressionit tarttis opetella, sen verran tehokkaita ne on.
Alihankintana printtipuolen graafista materiaalia!
-
- Viestit: 1014
- Liittynyt: 6.11.2004 klo 19.35
Viesti Kirjoittaja nobu178 »
Hyvä, että sait homman toimimaan.
<xsl:value-of select="translate(isbn, '-', '')" />
Tämmönen voisi toimia ja se olisi sekä yksinkertaisempi että tyylikkäämpi kuin php:llä silmukoiminen. Ehkä kokeilemisen arvoinen.
Olen tosi vähän käyttänyt XSLT:tä ja seuraavaakaan en ole itse kokeillut. Kirjoittamani voi siis olla virheellinen:Jamac kirjoitti:Sisältö ko. saitille haetaan XML-tiedostosta, mikä parsitaan HTML:ksi XSLT tyylitiedoston kautta php:llä. Eli XML:ssä on <isbn>951-0-30625-8</isbn> jollin sen ympärille on ihan helppoa laittaa merkkaukset.
Muistaakseni XSLT tyylissäkin olisi mahdollista käyttää tuota regular expressioneja (?) mutta en osaa...
<xsl:value-of select="translate(isbn, '-', '')" />
Tämmönen voisi toimia ja se olisi sekä yksinkertaisempi että tyylikkäämpi kuin php:llä silmukoiminen. Ehkä kokeilemisen arvoinen.
-
- Viestit: 18040
- Liittynyt: 20.2.2004 klo 23.12
- Paikkakunta: Tampere
Viesti Kirjoittaja Jamac »
Joo, totta on että tuo kannattaisi "tyylikkyyden" nimissä laittaa tuonne. Pitää kyllä kokeilla joskus kun on aikaa. Toistaiseksi tuo ratkaisu toimii, ja todennäköisesti itse kirjaesittelyssä ei ilmene tuota isbn= hässäkkää, jolloin "kummalisesti" sisältö muuttuisi itse kira-arvostelussa.
Tuo koko systeemi on aika kiva, nimittäin arvostelut exportataan InDesignistä (lehden taitosta) XML:nä (missä se on tagitettu, otsikot, kappaleet, boldit, italicit yms,yms. kuvat). InDy tekee XML:n ja mapin missä on kuvat. Sen satsin kun viskaa www-serverille /vuosi/numero/sivu/ alahakemistoon, niin avot, saitti on päittynyt, kaikki linkit ja kaikki generoituu automaattisesti. Aika juhlaa.
Tuo koko systeemi on aika kiva, nimittäin arvostelut exportataan InDesignistä (lehden taitosta) XML:nä (missä se on tagitettu, otsikot, kappaleet, boldit, italicit yms,yms. kuvat). InDy tekee XML:n ja mapin missä on kuvat. Sen satsin kun viskaa www-serverille /vuosi/numero/sivu/ alahakemistoon, niin avot, saitti on päittynyt, kaikki linkit ja kaikki generoituu automaattisesti. Aika juhlaa.
Alihankintana printtipuolen graafista materiaalia!
10 viestiä
• Sivu 1/1
Palaa sivulle “Ohjelmointi, skriptit ja palvelimet”
Hyppää
- Yleiset aiheet
- ↳ Ajankohtaista Apple-maailmasta
- ↳ Käyttöjärjestelmät
- ↳ Ohjelmat
- ↳ Yleiskeskustelu
- Mac ja oheislaitteet
- ↳ Yleiskeskustelu laitteista
- ↳ MacBook, MacBook Pro ja MacBook Air
- ↳ iMac
- ↳ Mac mini
- ↳ Mac Pro ja Mac Studio
- ↳ Ongelmia Macin kanssa?
- iPhone, iPad ja Apple Watch
- ↳ iPhone-, iPad- ja Apple Watch -laitekeskustelu
- ↳ iPhone-, iPad- ja Apple Watch -ohjelmat sekä iOS
- ↳ Ongelmia iPhonen, iPadin tai Apple Watchin kanssa?
- Huviksi ja hyödyksi
- ↳ Off-topic
- ↳ Kuva ja graafinen suunnittelu
- ↳ Audio ja musiikki
- ↳ Video, televisio ja elokuvat
- ↳ Pelit ja pelaaminen
- ↳ Ohjelmointi, skriptit ja palvelimet
- ↳ Tietoturva ja varmuuskopiointi
- ↳ Verkot, mobiilidata ja muut puhelimet
- ↳ Retronurkka
- ↳ Foorumin ylläpito
- Kauppapaikka
- ↳ Myydään Mac
- ↳ Myydään iPhone, iPad ja iPod
- ↳ Myydään muut Applen tuotteet
- ↳ Myydään muuta tietotekniikkaa
- ↳ Ostetaan Mac
- ↳ Ostetaan iPhone, iPad ja iPod
- ↳ Ostetaan muut Applen tuotteet
- ↳ Ostetaan muuta tietotekniikkaa
- ↳ Vaihdetaan, annetaan, työtä haetaan ja tarjotaan
- ↳ Kauppapaikan keskustelu ja hintavinkit