Autor | Zpráva | ||
---|---|---|---|
Jcas Profil * |
#1 · Zasláno: 23. 4. 2014, 16:12:51
Protože reg výrazy absolutně nemůžu pochopit, rád bych touto cestou poprosil přímo o kus kódu.
Potřebuji odstranit(zvýrazněnou část) pořadová čísla na konci souboru. text-text-číslo.přípona, nebo text-číslo-číslo.přípona příkl. <?php $soubor = "tele-cerne-03.jpg"; //echo vrátí tele-cerne.jpg $soubor = "tele-2014-1234.jpg"; // tele-2014.jpg $soubor = "kralik-2014-straka-25.jpg"; // kralik-2014-straka.jpg ?> Děkuji |
||
juriad Profil |
Takže chceš odstranit vše od poslení pomlčky až po tečku.
<?php $soubory = array("tele-cerne-03.jpg", "tele-2014-1234.jpg", "kralik-2014-straka-25.jpg", "pes-steka-na-kocku.jpg"); foreach ($soubory as $f) { echo preg_replace('/-[0-9]*\./', '.', $f); echo "\n"; } Rozeberu: /-[0-9]*\./ pomlčka tady nemá žádný speciální význam, proto je uvedena rovnou [0-9] znamená: libovolný znak v rozsahu 0 až 9 (tady pomčka značí rozsah). Lze to také zapsat jako [0123456789], jen je to ukecanější. hvězdička říká, že předchozí znak (to číslo) se může libovolně krát opakovat (povolí i opakování nulakrát = nebude vůbec) \. znamená znak tečka. Kdyby tam nebylo to zpětné lomítko, tak by ta tečka měla význam "libovolný znak bez omezení". A jelikož jsem tu tečku sežral, tak ji pak vrátím (první argument říká, co se má nahradit; druhý čím se to má nahradit). |
||
Jcas Profil * |
#3 · Zasláno: 23. 4. 2014, 17:26:49
Téda, děkuji i za vysvětlení. Nyní kontrola mé chápavosti.
Najde-li se v řetězci část, která začíná pomlčkou /- a končí tečkou \./ a současně je mezi těmito dvěma znaky číslo 0-9 [0-9] a toto číslo se libovolně opakuje 0* až x* * , tak je to true.
/-[0-9][a-z]*\./ - tohle by asi sežřalo i tu "kočku" z tvého posledního souboru.
A říkáš, že tečka je libovolný znak. Potom tohle by asi udělalo z prvního souboru "tele.jpg". /-.*\./ Ale to už se v tom jenom rejpu, abych pochopil. Tvoje první odpověď je přesně to co jsem potřeboval. Mockrát děkuji. |
||
juriad Profil |
/-[0-9][a-z]*\./ kočku be nesežralo. Sežralo by to třeba -7kocka. i -03. .
Do hranatých závorek můžeš zadat více rozsahů: [a-z0-9] . Pokud bys chtěl povolit i pomlčku, musíš ji umístit na kraj.
Ten tvůj reg. výraz znamená: pomlčka, pak číslice, pak libovolný počet malých písmen a na konec tečka. /-.*\./ (1) tady máš pravdu.
Poud bys ale chtěl cokoli od pomlčky (ať už je to jakýkoli znak) až po tečku. Negace se provádí pomocí znaku ^ uvedeném hned za otevírací závorkou [:
/-[^.]\./ (2)
případně můžeš zakázat i pomlčku: /-[^.-]\./ (3)
Liší se to na třeba příkladu: abc-def-ghi-jkl.mno.pqr.stu Tam (1) najde abc-def-ghi-jkl.mno.pqr.stu , a výraz (2) najde abc-def-ghi-jkl.mno.pqr.stu a (3): abc-def-ghi-jkl.mno.pqr.stu
|
||
Jcas Profil * |
#5 · Zasláno: 23. 4. 2014, 17:58:27
Teď mi to už dalo trochu zabrat, i když jsi mi udělal takový hezký příklad.
[^.] jakýkoliv znak, který není tečka. (Zapomněl jsem, že tu pomlčku a tečku máme na začátku a na konci výrazu a nemohl tudíš pochopit, proč ti je to žere, i když je neguješ. ::))
/- [^.] \./ abc- def-ghi-jkl .mno.pqr. |
||
Časová prodleva: 10 let
|
0