Autor Zpráva
error414
Profil
Potreboval bych poradit s regulernim vyrazem

mam znaky admin a potrebuju aby je retezec nebsahoval
zatim sem to nikde nenasel

^.*(admin).*$
tohle obsahuje a jakz je ten negator?
diky
Peca
Profil
Negátor je tuším taky ^ Zkus něco me smyslu ^[.*^(admin)]$ ale možná jsem úplně vedle...
error414
Profil
Peca
bohuzel nefunguje
Peca
Profil
Otázka je, jestli vůbec regulární jazyk toto umožňuje...
Mohlo by se na to jít obráceně:
if (!eregi("admin",$string)) ...
Záleží na tom, co přesně potřebuješ...
error414
Profil
neco se muze menit
mam retezec
neco admin: 25 neco
neco petr: 45 neco
neco tomas: 65 neco

a ja potrebuji vybrat radky kde neni admin
script to cte po radcich a ja potrebuji vsechny radky ktere obsahuji neco neco: cislo , ale to druhe neco nesmi byt admin
Hugo
Profil
A nestačí ti toto
http://mirrors.inway.cz/manual/en/function.strpos.php

Můžeš testovat řetězec admin:
error414
Profil
Hugo
jj dik, ja to taky uz vyresil takovym divnym zpusobem, slo me o to jestli to nejde napsat jedni regularnim vyrzem
Hugo
Profil
error414

IMHO by to mělo jít, pokud nezapomenu, tak si s tím doma pohraju.
error414
Profil
Hugo
Diky
ah01
Profil
Myslím, že pokud to lze vyřešit nějak jednoduše pomocí fcí. pro práci s řetězci, tak je to lepší, něž všude cpát reg. výrazy. Aspoň to bude rychlejší, ne.
Hugo
Profil
ah01

S tím plně souhlasím.

error414

Tak jsem si s tím výrazem trochu hrál. Nakonec to nebylo tak složité, ale musel jsem použít perlovské výrazy.


<?php
$string = 'jhjkh neadmin: 235';
$string2 = 'lkjlk admin: 464';
$reg = '/^(\S+)(\s)(?!admin:).*$/';
print (int)preg_match($reg,$string);
print (int)preg_match($reg,$string2);
?>
error414
Profil
Hugo
moc diky, moc mu nerozumim ale podivam se na to. PHP je v reg vyrazech kompatibilni s PERLEM, teda pokud se nemylim.
Hugo
Profil
error414

Jsou možné dvě syntaxe. Pro tu perlovskou jsou funkce preg_, pro POSIX syntaxi jsou zase funkce ereg.
Hugo
Profil
error414

Ten výraz není složitý
(\S+) - všechno kromě bílých znaků
(\s) - bílý znak (mezera)
(?!admin:) - pokud najde řetězec admin: tak vrátí false, opačný případ je (?=admin:)
error414
Profil
Hugo
Diky, (\S+) tuhle syntax neznam a (?!admin:) tuhle take, musim se na to jeste podivat.

Na internetu je malo kvalitnich tutorialu o regularnich vyrazech, nebo jsem alespon zadny nenasel

BTW: nechapu co tu delas tak brzo rano ja mam jeste noc
Hugo
Profil
error414

Pokud se někde dostaneš k linuxu, tak stačí spustit 'man perlre'.

Manuálové stránky jsou IMHO i někde na webu, zkus použít google.

P.S.:
Mám pracovní dobu od 5.00 do 17 - 20.00
error414
Profil
Hugo
Pokud se někde dostaneš k linuxu, tak stačí spustit 'man perlre'.
Linux jsem zavrhl, teda aspon prozatim. Je to v jinem topicu . No flame

Manuálové stránky jsou IMHO i někde na webu, zkus použít google.
To jsem delal ale nic jsem nenasel, ale podivam se, hledal jsem regularni vyrazy pro PHP.

Mám pracovní dobu od 5.00 do 17 - 20.00
A to delas co???
To si admin? Jinak si to nedovedu predstavit.
Hugo
Profil
>To jsem delal ale nic jsem nenasel
http://www.hmug.org/man/1/perlre.php
To je ta manuálová stránka
error414
Profil
Hugo
jeste prosim te ja ty reg vubec nechapu
treba tohle
^.+@.+$ tohle odpovida neco@neco ale uz ne neconeco
^.+[^@].+$ tohle odpovida neco@neco ale aji neconeco

nechapu kdyz jsem timhle [^@] vyradil znak @
Hugo
Profil
^.+@.+$

.+ libovolný řetězec o délce minimálně jeden znak
@ zavináč

Ten zavináč tam být musí, proto neconeco nemůže fungovat.

^.+[^@].+$

Pokud máš výraz [^@], tak tomu odpovídá jakýkoliv řetězec, který neobsahuje znak @, např.

^[^ab]+$
cde - shoda
ade - neshoda
bde - neshoda

Snad to je aspoň trochu pochopitelné.
Hugo
Profil
Ješte, proč výrazu ^.+[^@].+$ odpovídá i neco@neco. Souvisí to s hladovostí kvantifikátorů, výraz .+ sežere celý řetězec i se zavináčem, proto dojde ke shodě.
error414
Profil
Hugo
jj ten prvni chapu ale ne ten druhy

^.+[^@].+$
neco@neco shoda proc? tohle fakt nechapu
neco@neco shoda
@neco shoda
Hugo
Profil
Protože výraz .+ sežere celý řetězec, takže [^@] se nemá šanci projevit. Musel bys to přepsat takto
^.[^@]+$. Tento výraz vezme jakýkoliv řetězec, který neobsahuje zavináč.
error414
Profil
Hugo
to neni upne pravda shoduje se treba s @neco
Hugo
Profil
error414

Aha, nemá tam být ta tečka.
error414
Profil
Hugo
nebzlo bz moyne se te treba ptat na skzpu rad bzch se to naucil?
Hugo
Profil
error414

Nebylo, protože skype nepoužívám. Maximálně přes ICQ, ale mám teď dost práce, takže moc nestíhám.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0