Portál AbcLinuxu, 10. května 2025 22:14

Dotaz: Negace regularniho vyrazu

16.11.2017 15:39 Rishare2 | skóre: 1
Negace regularniho vyrazu
Přečteno: 1236×
Odpovědět | Admin

Ahoj,
snazim se pouzit negaci regularniho vyrazu bez presneho ukotveni v stringu. Nejlepe vysvetlim na prikladu:


Text: 'aabbcc'

Otazka: Obsahuje Text retezec 'bb'?
Regularni vyraz: .*bb.*

Otazka2: Je Text bez retezce 'bb'?
(nefunkcni) regularni vyraz: (?!(.*bb.*))


Chapu, proc to takto nefunguje (vyhodnoti se jako true na 'aa'), ale ja bych potreboval logiku "Pokud retezec obsahuje 'bb' tak vysledek je False. String ma ruznorodou delku a hledany retezec muze byt umisten kdekoliv. Vyhodnoceni se nasledne dela v JS takto a bohuzel ten kod nemohu menit, jen mu podsouvat regexy.

var regexObj = new RegExp(regex, "g");
if (regexObj.test(Text])) {}


Diky za komentare, jsem vdecny za jakoukoliv pomoc.



Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Rishare2 (tazatel))
Alkel U3 avatar 16.11.2017 16:55 Alkel U3 | skóre: 7
Rozbalit Rozbalit vše Re: Negace regularniho vyrazu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevím bohužel, jak v JavaScriptu, s PCRE mi funguje tenhle pattern: '^((?!bb).)*$'
$ cat > lines 
aabb
abba
acca
bbaa
ccaa
baab


$ grep -P '^((?!bb).)*$' lines 
acca
ccaa
baab
wamba avatar 16.11.2017 21:13 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Negace regularniho vyrazu
také by šel použít následující (trochu hůře čitelný) regexp: '^(b?[^b]+)*b?$'
This would have been so hard to fix when you don't know that there is in fact an easy fix.
16.11.2017 22:32 Rishare2 | skóre: 1
Rozbalit Rozbalit vše Re: Negace regularniho vyrazu
Diky, diky, diky, to je presne to co jsem potreboval.

regex = "blabla";
negated_regex = "^((?!"+regex+").)*$";


Parada, ten libovolny znak za negative lookahead me nenapadl a pro me potreby je toto reseni mnohem vhodnejsi, nez druhe reseni uvedene nize (kvuli negovani libovolneho strojove generovaneho regexu jinym procesem).

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.