Autor Zpráva
pavel prochazka.zde.cz
Profil *
Zdravim....
mam tedka zapeklity problem....
Potrebuji hledat ve vete slova ktera tam MUSI bejt ale uz neni dano v jakem poradi....
Nejak jsem neprisel jak to v regulárním výrazu specifikovat.... Jedine co me napadlo je vytvorit vsechny mozne kombinace a ty potom pospojovat pomoci znaku | (or). Ale nemam tuseni jak mam vypocitak kolik je moznosti. S pribivajicim dalsim slovem se stava regulární výraz enorme slozity... Kdy mam jen dve slova, tak to jsou dve mozne kombinace. u 3 je to 6 a u 4 slov jsem to nejak spocital a vyslo me to 24. Toz uz zacina bejt neunosne.....

priklad jak jsem to vykoumal.....:

[a-zA-Z0-9\_ ]?slovo1[a-zA-Z0-9\_ ]?slovo2 |[a-zA-Z0-9\_ ]?slovo2[a-zA-Z0-9\_ ]?slovo1

dokaze me nekdo poradit?
Pripadne jiny jednodussi algoritmus.....
souki
Profil
Pokud je o výpočet počtu možností, tak je to variace ( http://cs.wikipedia.org/wiki/Variace_%28kombinatorika%29 ). Ale regulární výraz, který potřebuješ by mě také zajímal
Retal
Profil
A proč ta slova hledáš? Potřebuješ je nahradit nebo dál zpracovat? Ukaž nejlépe konkrétní příklad, ne fiktivní. Pokud je potřebuješ jen detekovat, šel bych na to jednoduše.

function obsahuje($retezec = '', $slova = array()) {
foreach($slova AS $slovo) {
if(stripos($retezec, $slovo) === false) {
echo $slovo;
return false;
}
}
return true;
}

$retezec = 'životných Distribuce, maskulin ke xxx pán vzorům. muž!';
$slova = array('distribuce', 'životných', 'maskulin', 'ke', 'vzorům', 'pán', 'muž');

echo obsahuje($retezec, $slova) ? 'Obsahuje slova' : 'Neobsahuje vsechna';
pavel prochazka.zde.cz
Profil *
jedna se o vyhledavaci algoritmus... hledani probiha po jednom radku z clanku, take me staci zda ty slova tam jsou obsazeny vsechny a nebo ne..... Ale nechci pouzivat dva algoritmy, tedka mam hledani podle regularnich vyrazu, ze vytvorim relurarni vyraz ze zadaneho vstupu a ten predam prikazu pro hledani.... Mam temer vsechno hotovo krome AND spojeni slov a jeste zastupny text za hverzdicku (*.txt). Hledaci algoritmus me zatim hleda slova spojena pomoci OR a jeste ze dany vysleden NESMY obsahovat konkretni slovo..... Na to jsem se vcera ptal jak mam udelat regurarni vyraz ale opacny.....
pavel prochazka.zde.cz
Profil *
Mohu klidne poslat cely vyhledavaci script ale tezko se vnem vyznate.....
pavel prochazka.zde.cz
Profil *
to souki: jo moc diky hodi se me vzorecek V3. sice na matiku nejsem blbej ale stejne tomu nerozumim.... co znamena ten vykricnik....Pomoci toho vzorecku vypocitam pocet variaci..... A jde nejak ten vzorecen rozlozit na jednotlive variace? Coz by bylo fak super.....
souki
Profil
pavel prochazka.zde.cz
vykřičník = faktoriál
radši pár příkladů a na algoritmus určitě přijdeš
0! = 1
3! = 1*2*3
5! = 1*2*3*4*5
10! = 1*2*....*7*8*9*10
thingwath
Profil
Teď si nejsem zcela jistý, ale je-li regulární výraz jakýsi druh stavového automatu, tak to asi nebude úplně vhodné.
Retal
Profil
Pokud hledáš pevné řetězce, je imho lepší použít str[i]pos() než regexpy; na tvém místě bych použil výše nastíněnou funkci.
Proč vlastně prohledáváš po řádcích? O použití databáze jsi uvažoval?
pavel prochazka.zde.cz
Profil *
o pouziti databaze ani neuvazuji.... Me se neliby jednotlive clanky v databazi.... Tedka je mam pekne v souboru a prohledavam prave ty soubory.... Ale toto neresim.... Resim zcela neco jineho.... Sice hledam pevne reteze ale pomoci str to nejde.... Kdyz zadem jako hledany retezec:


ahoj + Pavel doma pocitac

tak regulerni vyraz bude:

[a-zA-Z0-9\_ ]?ahoj[a-zA-Z0-9\_ ]?Pavel |[a-zA-Z0-9\_ ]?Pavel[a-zA-Z0-9\_ ]?ahoj|doma|pocitac


toto zvladne ta primitivni funkce STR? tezko.... tak na to pouziji regurarni vyraz....
resim jak sestavit tento regyrarni vyraz NE DATABAZE!!!
rabbit
Profil
To pavel prochazka.zde.cz:
o pouziti databaze ani neuvazuji.... Me se neliby jednotlive clanky v databazi....
Promiň, ale to je argument jak bolavá noha. Zkus být fér a říct konkrétní důvod tvé nechuti k databázi. I když by tím důvodem měl být například "strach" z neznámého, tak za to se nestřílí. Tím spíš, že když tvrdíš, že na matiku nejsi blbej (což ti nemám důvod nevěřit) a přitom nevíš nic o faktoriálu, tak bych si tipnul, že jste to ještě nebrali, a že seš teda trošku mladší ;-)

Pokud trváš na tom, poskládat to z regulárního výrazu, je určitě lepší způsob než skládat do regexpu různé kombinace pořadí (to je stručně řečeno hovadina). Regulární výrazy (perl compatible) jsou brutálně mocný nástroj, každý normální programátor si v každodenní práci vystačí s (odhadem) 5% jejich možností. Proto pokud na tomto postupu trváš, můžu tě tak maximálně odkázat na seriál článků o regulárních výrazech, který vycházel na Interval.cz. Nic lepšího (imho) v češtině nenajdeš.

Pak je tady ještě jedno řešení ... tím bych se určitě vydal já ... a to je poskládání testů jednotlivých slov do podmínky, a to ať už přes strpos nebo preg_match:
if ( strpos($radek, 'slovo1') !== false && strpos($radek, 'slovo2') !== false && ... && strpos($radek, 'slovoX') !== false ) {
}
Výhody ti ani nebudu popisovat ... snad tě napadnou ;-)
Retal
Profil
rabbit
Tvé řešení je totožné s mým (ale méně flexibilnější).

pavel prochazka.zde.cz
Je to tvůj boj, já ti nějaké řešení navrhl, ale pokud trváš na regexpech a na vyhledávání po řádcích v souboru, nebudu se dále zdržovat.

A mmch: regulární, regularni, relularni, regurarni, regyrarni - už se rozhodni. :-)
pavel prochazka.zde.cz
Profil *
Cely script je navrzeny pro praci po radkach... musel bych to cele predelat a na to namam moc casu....Me uz chyby ona zdanlive primitivni vec.....

Co se tyce databazi, nevim proc ale vzdy skonce cela debata u databaze, proto toto jsem reagoval tak prehnane odmitave.... :)

Delat to pomoci IF sice jde ale musel bych script predelat na praci po celem souboru aby to netrvalo moooc dlouho... slozitosti se nejak nebojim....
Jen se desim funkce ktera by me z php souboru preparovala texty, ja mam jednotlive clanky v samostatnych php souborech obaleny nezbytne nutnema prikazama v php a html... Tedka mam funkci ktera preparuje texty hezky po radkach a funguje pekne, kdyz jsem jen tak skusebne postrcil cely soubor, tak cely script se zblasnil a hlasim milion chyb, proste neni na to pripraven....

Takze mam tedy dve moznosti.... pokracovat ve skladani regulárního vyrazu a nebo pomoci IF....
Uvidim jak se to vyresi... A nebo se na AND funkci vybodnu a bude to....
Stejne jsem si vsimnul ze kdy zadam string AND string na ruznych vyhledavacich tak stejne se pouzije OR....
OR me uz faka....
Toto téma je uzamčeno. Odpověď nelze zaslat.