Autor | Zpráva | ||
---|---|---|---|
návštěvník Profil * |
#1 · Zasláno: 28. 12. 2013, 14:11:15
Potřeboval bych najít regulární výraz na nalezení
printm($lan->get( , čísla za get( a závorka za číslem (max. 3 číslice). subjekt: <TR> printm($lan->get(1), something )); printm($lan->get(12), something2 )); printm($lan->get(123), something3 )); <TD align=center VALIGN="TOP"><br><br> Mám toto. ale nefunguje: /(.*)(printm\($lan->get\()(\d{1,3})(\))(.*)/ Poradí někdo? |
||
Jan Tvrdík Profil |
#2 · Zasláno: 28. 12. 2013, 15:12:13
'/printm\\(\\$lan->get\\(\\d+\\), something \\)\\)/' |
||
návštěvník Profil * |
#3 · Zasláno: 28. 12. 2013, 15:41:19
Díky
|
||
návštěvník Profil * |
#4 · Zasláno: 30. 12. 2013, 14:49:26
Můžete poradit s tímto regulárním výrazem?
/.{0,15}[\W]sprintm\(\$lan->get\((\d{1,3})\).{0,15}/ Má sloužit k nahrazení řetězců jako if($count == '0') sprintm($lan->get(205)); if($count == '0') sprintm($lan->get(6); Problém je v tom, že se mi nahradí pouze několik málo výskytů a ostatní uvedené na obrázku níže, zůstává nezměněno - tedy nenalezeno - viz obrázek níže. Kdyby bylo nalezeno tak by bylo i zaměněno za sprintm($lan->get(^ a vyskočila by mi hláška. http://oi39.tinypic.com/30myefl.jpg Je to součást skriptu na nahrazování čísel v souborech, a v případě, že je text nalezen tak to píše hlášku. V tomto případě žádná hláška není. Ještě před tím než spouštím regulární výraz provádím nejdříve kontrolu jestli se v souboru vyskytuje string sprintm($lan->get( Tedy na starost to mají dva příkazy, strpos a preg_match. strpos by měl být v pořádku, ale ten regulární výraz a preg_match v tom si nejsem jistý. if ( strpos ( $content , $this->c->find->sub_string) !== false) { $count = preg_match_all( "/".$this->regFind[0]."/" , $content, $matches ); if (!$count) { print_r($matches); echo "not found in $file: ".$this->subFind."<BR>\n"; } else { // yde n8sleduje smyčka která prochází výsledky z pregmatch } |
||
návštěvník Profil * |
#5 · Zasláno: 30. 12. 2013, 16:07:48
Tak chyba se už našla (úplně jinde). Nemusíte odpovídat. Chyba v algoritmu
|
||
Časová prodleva: 21 dní
|
|||
návštěvník Profil * |
#6 · Zasláno: 20. 1. 2014, 19:34:12 · Upravil/a: návštěvník
Můžete mi poradit proč nefunguje tento regulární výraz na odstranění jakékoliv částky z textu? např. 400,- . Když zaměním \d\d,- za jakékoliv slovo nebo jiný výraz neobsahující číslice tak najde, ale číslice nenajde.
/(?:\W|^)\d\d,-(?:\W|$)/iu Nemůžu pochopit proč slovo /(?:\W|^)slovo(?:\W|$)/iu najde, ale číslice ne
$mes = "some text 400,- next text"; $mes = preg_replace("/(?:\W|^)\d\d,-(?:\W|$)/iu","",$mes); pozn. levá část /(?:\W|^)\d\d a pravá část (?:\W|$)/iu jsou součástí metody, která normálně hledá slova, a tam to funguje. Proto tam mám tyhle dvě věci navíc. |
||
DarkMeni Profil |
#7 · Zasláno: 20. 1. 2014, 19:53:20
Protože
\d\d čeká na dvě číslice, "400" má tři číslice, místo těch \d\d zkus udělat něco jako \d+ nebo třeba \d{1,4}
|
||
návštěvník Profil * |
#8 · Zasláno: 20. 1. 2014, 19:58:34
DarkMeni:
dikes |
||
Časová prodleva: 3 dny
|
|||
návštěvník Profil * |
#9 · Zasláno: 23. 1. 2014, 17:47:58 · Upravil/a: návštěvník
Řeším opět dilema regulárního výrazu. Jak řešit podobnou situaci: nalézt řetězec, který obsahuje slovo voje, ale netýká se to slov jako tvoje a doje. Jelikož tvoje obsahuje voje, tak hrozí, že vrátí jeho podřetězec, což ale v případě tvoje nechci.
Ještě upřesním: pokud nejde čistě o slovo voje, tak nesmí vracet žádný podřetězec, tedy ani voje, ani oje, ani je, ani e. |
||
Kubo2 Profil |
#10 · Zasláno: 23. 1. 2014, 19:13:44
návštěvník:
Malo by fungovať (bude hľadať iba slovo voje): \bvoje\b |
||
DarkMeni Profil |
Zkus ukázat jak vypadá ten regularní výraz, třeba z toho pujde líp pochopit co zkoušíš udělat
Jestli chceš najít slovo "dvoje" nebo "troje", tak můžeš použít spojku | (nebo)
/(tr|dv)oje/ -[\W\d](slovo)[\W\d]- |
||
Tori Profil |
#12 · Zasláno: 23. 1. 2014, 19:17:40
Metaznak
\b označuje hranici slova, přidejte ho z obou stran hledaného výrazu.
|
||
návštěvník Profil * |
#13 · Zasláno: 23. 1. 2014, 19:46:27
Tori:
$str='Tvoje auto je vojete'; předloha: /v\bojet\b(?!o|i)/ |
||
Tori Profil |
#14 · Zasláno: 23. 1. 2014, 20:11:21
návštěvník:
Aha, takže chcete vyhledat 1. shodu celého slova a 2. slova, která začínají hledaným výrazem? Zkuste /\bvoje(?:\w+?)\b/iu
|
||
návštěvník Profil * |
#15 · Zasláno: 23. 1. 2014, 20:47:44 · Upravil/a: návštěvník
Tori:
Ono jde o to, že konec se může měnit, ale předek má jenom dva tvary, které mají být nalezeny. Řetězec začíná buď vojet nebo ojet ale jaka bude koncovka to nevím. Takže možná to s tím \b \b nepůjde. Přemýšlím nad dvěma samostatnýma regulárama. Jeden tam má t a druhý d: \bv?ojet.?\b [v^d]?ojed[ueo][usm]? |
||
Časová prodleva: 4 dny
|
|||
Návštěvník Profil * |
#16 · Zasláno: 27. 1. 2014, 17:05:01
Konečně jsem to vyřešil. Mám na to dvě předlohy:
(?:[^cdkprmt])oje[tl].? (?:[^cdkprmt])ojed[ueo][usm]? Testováno na větách: $str='Tvoje auto je vojete. Otec, dojel v cas. Kojeni neni dojeni. Vojedu tvoje auto klicema. Projedu se autem. Dojedu az zitra. '; Správný výsledek poté co jsem našel a zaměnil nalezené výsledky: Tvoje auto je ******. Otec, dojel v cas. Kojeni neni dojeni. ****** tvoje auto klicema. Projedu se autem. Dojedu az zitra. |
||
Časová prodleva: 4 dny
|
|||
Návštěvník Profil * |
#17 · Zasláno: 31. 1. 2014, 12:52:19
Jak změnit tento regulární výraz:
preg_match_all('/(?:\.|^).+(?:\.|$)/u', $message, $matches); |
||
Kubo2 Profil |
#18 · Zasláno: 31. 1. 2014, 21:11:01
Návštěvník:
Skús preg_split. |
||
Časová prodleva: 10 let
|
0