Portál AbcLinuxu, 10. května 2025 22:14
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])) {}
Řešení dotazu:
'^((?!bb).)*$'
$ cat > lines aabb abba acca bbaa ccaa baab $ grep -P '^((?!bb).)*$' lines acca ccaa baab
'^(b?[^b]+)*b?$'
regex = "blabla";
negated_regex = "^((?!"+regex+").)*$";
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.