Regex filtrující nevýskyt slov na úrovni výrazu

rreguler

Regex filtrující nevýskyt slov na úrovni výrazu
« kdy: 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ů ...
« Poslední změna: 22. 10. 2018, 21:13:59 od Petr Krčmář »


k0k0t

co todle?:

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



Xxxxxx

Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #2 kdy: 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.

Xxxxxx

Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #3 kdy: 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.

RDa

  • *****
  • 2 838
    • Zobrazit profil
    • E-mail
Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #4 kdy: 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 :-)


Luzir

Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #5 kdy: 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.

Rado2

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.

zvol

Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #7 kdy: 25. 10. 2018, 18:54:30 »
Kód: [Vybrat]
/^(?!.*(?:jedna|dva))/

RDa

  • *****
  • 2 838
    • Zobrazit profil
    • E-mail
Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #8 kdy: 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?

Chancelot

Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #9 kdy: 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 :)

mtd

Re:Regex filtrující nevýskyt slov na úrovni výrazu
« Odpověď #10 kdy: 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. :)