Autor Zpráva
Jcas
Profil *
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]*\./
lomítka na začátku a na konci jsou jen oddělovače; říkají: tady začíná a tady končí výraz
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 *
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0