Autor Zpráva
Milkys
Profil
Dobré poledne přátelé,
potřebuji z řetězce např.
"187 Nějaký text i s číslama...atd"
nebo
"1975Nějaký text i s číslama...atd"
nebo
"187 - 2432Nějaký text i s číslama...atd"
nebo
"954-1240 Nějaký text i s číslama...atd"
dostat vždy jen ty čísla na začátku t.j. 187 nebo187 - 2432 nebo 954-1240...ap.
Můj poslední pokus je:
$ret = preg_replace('/\d+/', '', $ret);
Toto mi funguje, přesně naopak než potřebuji. Smázne to čísla a text nechá.

Napadlo mě jak rozdělit řetězec:
čísla nechat do té doby než bude následovat velké písmeno, poté všechny znaky včetně velkého začátečního písmene smáznout.

Dá se to nějak napsat v reguláru?
Budu velice rád, když mě někdo poradí.
Děkuji
Keeehi
Profil
preg_match("~^d+~",$ret,$match);
Pokud tam má být i ta mezera a polmlčka tak:
preg_match("~^[0-9 -]+~",$ret,$match);
Milkys
Profil
Keeehi:
ozývám se s děkovačkou pozdě, ale přece - děkuji. Nejprve jsem si o preg_match musel něco přečíst, protože mi mozek nebral k čemu je tam ta $match a co vůbec obsahuje a zjistil jsem, že je to vlastně pole, jestli se pletu tak mě prosím opravte (php mám jako hobby a učím se ho).
Takže:
$ret = preg_match('/^([0-9 -])+/',$ret ,$match);
      if (!empty($match[0])) //print_r($match);
      echo $match[0];
Vypíše přesně co potřebuji, to je ok. Problém nastane např. v těchto případech:
"187 - 2432Nějaký text i s číslama...atd"
nebo
"954-1240 Nějaký text i s číslama...atd"
Tam se zobrazí samozřejmě jen ta první hodnota 187 nebo 954. Potřeboval bych, aby tam byly i ty číselné hodnoty za "-" nebo " - ". Všechny 4 příklady uvedené v [#1] může řetězec obsahovat.

V podstatě by mi současný stav stačil jen mě zajímá zda to jde vyřešit a pokud ano tak jak. Jestli třeba existuje nějaký regex na určení velkého písmene a tím se řekne, že co je před 1. velkým písmenem textu je pole[0] a co je po něm je pole[1] a já bych použil jen to pole[0]. Asi si vymýšlím, ale zajímá mě to jestli by se to tak dalo udělat.
I tak děkuji za pomoc.
Keeehi
Profil
Funkci preg_match, jste pochopil správně, na indexu 0 je celý nalezený řetězec odpovídající výrazu. Na dalších indexech 1,2,3,... jsou řetězce odpovídající subvýrazům, pokud jsou nějaké subvýrazy existují. subvýraz je to, co je v závorkách. Ve vašem případě je ani nepotřebujete.

Pro oba uvedené příklady mně to ale funguje správně.
$found = preg_match('/^[0-9 -]+/',$ret ,$match);
if ($found)
    echo trim($match[0]);
Pro 954-1240 Nějaký text i s číslama...atd to vrací 954-1240.
Pro 187 - 2432Nějaký text i s číslama...atd to vrací 187 - 2432.
Milkys
Profil
Keeehi:
aha, opravdu. Omlouvám se, chyba je v mém zadání. Nefunguje to pokud je ta $ret jen čísla bez textu např. "954-1240" nebo "187 - 2432" to vypíše jen to první číslo.Tuto možnost jsem přehlédl.
Keeehi
Profil
Milkys:
I pro čísla jen bez textu mi to funguje správně.
Milkys
Profil
Keeehi:
to jsem blázen, mě ne. To je divné. Ještě bych prosil jestli znáte odpověď na můj dotaz viz poslední odstavec #3.
Keeehi
Profil
Takhle vypadá velké písmeno [A-Z] <- ale jde o znaky anglické abecedy, tedy bez diakritiky.

Pokud se chceš o regulárních výrazech dozvědět více, tak doporučuji toto pdf (od strany 21). Z něho jsem se to naučil já.
Milkys
Profil
Keeehi:
Tak jseš dobrej. Četl jsem to 2x, zejména tu pasáž a až podruhé jsem začal trochu chápat souvislosti, ale ono to půjde ještě tak 3x 4x to přečtu a třeba na tom budu o něco lépe. Hlavně to chce rv používat častěji, abych se v tom více procvičil. Zatím je pro mně rychlejší napsat klasickou podmínku na více řádků než jeden složitější rv na 1 řádek.
Já jsem doposud čerpal z www.regularnivyrazy.info a včera jsem našel řekl bych dobrý nástroj na regulární výrazy kde hned vidím co mi "vyleze".
Ještě jednou děkuji i za pdf a hezkou neděli všem.
Milkys
Profil
Keeehi:
prosím Tě jestli jseš ještě na příjmu, zasekl jsem se ještě na tomto:
$pomoc2 = preg_replace('/^<h2> Doprava <\/h2>([a-zA-Z0-9]*)+<h2>/','<h2>',$pomoc2);
Tímto chci odstranit text ohraničený tagem <h2> a končící <h2> včetně tagů.
Příklad textu:
<h2> Doprava <\/h2>
Nějaký text, který chci odstranit včetně párových tagů h2 a nadpisu.
<h2> Další nadpis<\/h2>
Další text, který odstranit nechci, zůstanou i tagy a nadpis.
Prosím Vás co mám špatně. Hlavně nepište, že všechno.
Keeehi
Profil
Milkys:
Nějak netuším, o co se snažíte. Chcete odstranit první nadpis a ten kus textu až k dalšímu nadpisu? A vždycky je v tom prvním nadpisu "Doprava"?
Milkys
Profil
Keeehi:
Chcete odstranit první nadpis a ten kus textu až k dalšímu nadpisu?
Ano přesně tak.

V nadpisu není vždy Doprava, ale momentálně mi jde konkrétně o nadpis Doprava a text pod ním resp. až po následující<h2>.

Prosím nevykat, na to si nepotrpím.
Keeehi
Profil
Pak by to mohlo vypadat takto:
echo preg_replace('~^<h2>.*?</h2>.*?<h2>~s','<h2>',$pomoc2);
Milkys
Profil
Keeehi:
Děkuji, perfekt. Trochu jsem to změnil a to už funguje jak potřebuji.
$pomoc2 = preg_replace('/<h2> Doprava <\/h2>.*?<h2>/','<h2>',$pomoc2);

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: