Autor Zpráva
uzivatel
Profil *
Zdravím.. Snažím se tvořit komentáře na webu.. Komentářů je už dost tak bych chtěl stvořit reakce na jiný koment..
Zatím jsem to vyřešil, [$cislo] kde $cislo je číslo komentáře, na který se ráguje..
[2] ahoj ráguju na dvojku 

Jak spáchat regulární výraz, který mi nahradí [cislo] za "<a href='#cislo'>reakce na [cislo]</a> "
Zkoušel jsem toto:
$zprava_z_db = preg_replace("(^[[0-9]|[1-9][0-9]]$)", "číslo <strong>\0</strong>", $zprava_z_db); nebo
$zprava_z_db = preg_replace("(^[1-9]?[0-9]$)", "číslo <strong>\0</strong>", $zprava_z_db);
Ani jedno nefunguje :-(. Výsledek vypadá třeba takto <strong>[1</strong>3 (respektivě, tučné je pouze část čísla. Musí to bý reakce od 0-99..
Děkuji
tiso
Profil
Za predpokladu že máš spätné lomítka po ^ a pred ]$ tak Ti tam chýbajú zátvorky a hodil by sa kvantifikátor
Okrem toho nemusíš vylučovať komentáre v tvare 02, pokiaľ ich tam nemáš tak sa nenahradia, nie je to síce najčistejšie riešenie ale funguje to...
Joker
Profil
Problém asi bude, že ten výraz obsahuje i začátek a konec řetězce, tj. ^ a $.
Tím pádem by tomu vyhověl jenom řetězec například "[2]", ale už ne "[2] nějaký text"

Jinak dobrá pomůcka na kontrolu regulárních výrazů je tohle:
http://weitz.de/regex-coach/
uzivatel
Profil *
preg_replace("(^([[0-9]|[1-9][0-9]])$)" nefunguje vůbec (nenajde číslo).. Když mám dejme tomu
bla la blab bla bla nejaky text
[22] reakce nakomentář 22
[11] ještě dodatek ke komentáři 11
nejaky text

Jak v tom textu najít [$cislo] přes regulární výraz? Pokaždé mi to najde je jen (25 --> 2 a 5)
Joker
Profil
Jak říkám, tomuhle výrazu odpovídá (za předpokladu, že tam jsou zpětná lomítka, které fórum sežralo) řetězec jenom v případě, že kromě toho čísla v hranatých závorkách už nic jiného neobsahuje.
Tj. v současnosti projde jenom: "[xx]"
a neprojde: "cokoliv [xx]" anebo "[xx] cokoliv"
Mastodont
Profil
Číslo v hranatých závorkách je &[[0-9]*&]

Namísto & si dosaď zpětná lomítka
uzivatel
Profil *
Joker: Aha, takže mi neprojde příspěvek. Jak tedy napsat regulární výraz aby mi prošlo "cokoliv text [cislo] dalsi text"
Mastodont: $zprava_z_db = preg_replace("(^([[0-9]*])$)", "číslo <strong>\0</strong>", $zprava_z_db); mi také nejde.

(^(zpetnelomitko[[0-9]*zpetnelomitko])$)
Mastodont
Profil
uzivatel

Sorry, ale už joker naprosto jasně napsal: Problém asi bude, že ten výraz obsahuje i začátek a konec řetězce, tj. ^ a $.
uzivatel
Profil *
Dobře, odstranil jsem to. Vypadá to takto:
$zprava_z_db = preg_replace("([[0-9]|[1-9][0-9]])", "číslo <strong>\0</strong>", $zprava_z_db);

A výsledek? číslo [31] označí se pouze první závorka [ a první část čísla. Nikoliv celé číslo.
Mastodont
Profil
No jistě, chybí ti tam kvantifikátor:

preg_replace("/&[([0-9]*)&]/", "číslo <strong>&&1</strong>", $zprava_z_db);

namísto & dej zpětné lomítko
uzivatel
Profil *
Mastodont: Díky funguje. BTW začínám nenávidět regulární výrazy. Ještě že se toho dá hodně najít na netu (kontrola emailu, z http odkaz atd.)
bukaj
Profil
uzivatel
a to je nenávidíš jen kvůli tomu, že je neumíš používat? :D
Mastodont
Profil
uzivatel

Jestli jedeš na Win, můžeš si pro trénink regulárů stáhnout třeba Regex Coach :-)

http://weitz.de/regex-coach/
Toto téma je uzamčeno. Odpověď nelze zaslat.