Autor Zpráva
kuxa
Profil
Zdravím,
mám na webu takový kód:
$nazev = preg_replace("([0-9]{2})([[:space:]]{1})(.*)", "$0. $2", $nazev);
Mělo by to v názvu písně nahradit první mezeru za číslicemi tečkou (např. 01 Název.mp3 => 01. Název.mp3)
Jenže to nefunguje :(
Píše to následující:
Warning: preg_replace(): Unknown modifier '(' in ... on line 39
Víte prosím někdo, jak to vyřešit? Regulární výraz mám správně, kontroloval jsem ho na testeru.
Děkuji předem!
juriad_
Profil *
Chybi ti ohraniceni regexu. Obal ho treba do lomitek.
kuxa
Profil
A jó :D
Díky moc! A ještě "menší" problém (asi už logický).
Takto mi to vrací jenom proměnné $0 a $1, kde $0 je celý název (01 Název) a $1 jen číslo (01). Ale já potřebuju název a číslo oddělit, abych mezi ně vehnal tečku. Samozřejmě by to šlo např. zjištěním délky názvu čísla a potom odečtením délky ze začátku celého řetězce, ale chci se zeptat, jestli není nějaká hezčí cesta (tj. jen tím regulárem). Díky
edit: No jo, nachází se to v $3 :D Zarazilo mě, že $2 bylo prázdné, ale to byla vlastně ta mezera :D Děkuji moc!
juriad
Profil
Klidně jsi to mohl napsat jednodušeji:
$nazev = preg_replace('/^(\d+)\s+/', '$1.', $nazev);
Libovolný počet číslic na začátku následovaný sekvencí alespoň jedné mezery nahraď za ty samé číslice a tečku. Skupinu obsahující mezeru a zbylé znak vůbec nepotřebuješ.

Mezera se v regexu zapisuje úplně normálně jako mezera. [[:space:]] obsahuje navíc tabulátor, vertikální tabulátor a zalomení řádku.
Psát, že něco má být jednou nemusíš, tak je to výchozí.
Pokud něco nepoužiješ, nemusíš to dávat do závorek (k zapamatování).

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0