Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: rreguler 22. 10. 2018, 19:50:45

Název: Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: rreguler 22. 10. 2018, 19:50:45
ahoj, chtěl bych znát postup pro regex, který pouští stringy neobsahující ani jedno ze určených slov akorát v podstatě něco jako
Kód: [Vybrat]
grep -v bures|agrofertAž na to, že právě já mohu určit pouze regulerní výraz a né parametry grep (třeba to vůbec matchuje jiná knihovna), tudíž potřebuji inverzi provést na úrovni výrazu


Například je možné udělat filtr koncovek
/(?<!jpg|js|regms-trans)$/

nebo filtr začátků
/^(?!Slibím|Zařídíme|Makáme)/

jak udělat
filtr filtrující kdekoli uprostřed? Bez nějakých ugly hacků ...
Název: Re:regex filtrující nevýskyt slov, něco jako grep -v, ale na úrovni výrazu
Přispěvatel: k0k0t 22. 10. 2018, 21:05:31
co todle?:

Kód: [Vybrat]
^((?!rumcajs).)*$
ale ja som strasna regex lama  ::)


Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: Xxxxxx 22. 10. 2018, 21:28:11
V kazdem jazyce, zakladni knihovne je vyhledani slova ve stringu/textu.
a pokud hledam jen slovo, je regex kanon na komara.
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: Xxxxxx 22. 10. 2018, 21:36:55
Nebyl jsem si jisty tim jak jsem napsal find vs regex.
tak co jsem vygooglil, tak regex je lepsi, je jednopruchodovy.
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: RDa 22. 10. 2018, 21:56:43
ahoj, chtěl bych znát postup pro regex, který pouští stringy neobsahující ani jedno ze určených slov akorát v podstatě něco jako
Kód: [Vybrat]
grep -v bures|agrofertAž na to, že právě já mohu určit pouze regulerní výraz a né parametry grep (třeba to vůbec matchuje jiná knihovna), tudíž potřebuji inverzi provést na úrovni výrazu

Kód: [Vybrat]
// obsahuje radek klicova slova?
if (!preg_match('/bures|agrofert/',$radek) {
    // ne, neobsahuje!
    ...
    ...
}

Nemas zac :-)
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: Luzir 24. 10. 2018, 23:41:24
Kód: [Vybrat]
preg_matchNemas zac :-)
Není zač.  Toto není regulérní výraz, nýbrž výraz v programovacím jazyce, který až teprv obsahuje regulérní výraz.
Název: Re:regex filtrující nevýskyt slov, něco jako grep -v, ale na úrovni výrazu
Přispěvatel: Rado2 25. 10. 2018, 17:53:59
co todle?:

Kód: [Vybrat]
^((?!rumcajs).)*$
ale ja som strasna regex lama  ::)

Toto je najlepšie riešenie čo poznám, je to ale veľmi neefektívne, treba sa tomu vyhnúť ak sa dá. Regex nie je vhodný na negatívne hľadania.
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: zvol 25. 10. 2018, 18:54:30
Kód: [Vybrat]
/^(?!.*(?:jedna|dva))/
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: RDa 25. 10. 2018, 23:17:48
Toto není regulérní výraz, nýbrž výraz v programovacím jazyce, který až teprv obsahuje regulérní výraz.

A jak poustis regex ty?
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: Chancelot 25. 10. 2018, 23:50:12
Toto není regulérní výraz, nýbrž výraz v programovacím jazyce, který až teprv obsahuje regulérní výraz.

A jak poustis regex ty?

:D tipl bych, že ho pouští právě podle toho, který jazyk nebo nástroj na to používá (na světě neexistuje jen PHP ;) ). třeba v js "tralalala".match(/r.l/)

btw: velmi dobrý nástroj pro testování regex(p)ů je https://regex101.com/ - snaží se i vysvětlit význam jednotlivých částí výrazu :)
Název: Re:Regex filtrující nevýskyt slov na úrovni výrazu
Přispěvatel: mtd 30. 10. 2018, 20:46:42
btw: velmi dobrý nástroj pro testování regex(p)ů je https://regex101.com/ - snaží se i vysvětlit význam jednotlivých částí výrazu :)

regexbuddy https://www.regexbuddy.com/ mi připadá lepší, je to debugger na mnoho dialektů regexů. běhá i pod wine. jeho autor napsal i další podobné nástoje, třeba regexmagic pro vyklikávání regexů v gui. :)