Autor | Zpráva | ||
---|---|---|---|
Milkys Profil |
#1 · Zasláno: 28. 1. 2012, 14:16:14
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); 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); preg_match("~^[0-9 -]+~",$ret,$match); |
||
Milkys Profil |
#3 · Zasláno: 28. 1. 2012, 21:35:30
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]; "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 |
#4 · Zasláno: 28. 1. 2012, 21:55:44
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]); 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 |
#6 · Zasláno: 28. 1. 2012, 22:34:34
Milkys:
I pro čísla jen bez textu mi to funguje správně. |
||
Milkys Profil |
#7 · Zasláno: 28. 1. 2012, 23:01:51
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 |
#8 · Zasláno: 28. 1. 2012, 23:21:49
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 |
#9 · Zasláno: 29. 1. 2012, 12:20:55
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. |
||
Časová prodleva: 3 dny
|
|||
Milkys Profil |
#10 · Zasláno: 1. 2. 2012, 22:25:28
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); 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 |
#11 · Zasláno: 1. 2. 2012, 22:35:31
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 |
#13 · Zasláno: 1. 2. 2012, 23:07:04
Pak by to mohlo vypadat takto:
echo preg_replace('~^<h2>.*?</h2>.*?<h2>~s','<h2>',$pomoc2); |
||
Milkys Profil |
#14 · Zasláno: 1. 2. 2012, 23:25:17
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); |
||
Časová prodleva: 12 let
|
0