Een reguliere expressie om een woord/tekenreeks uit te sluiten

Ik heb een reguliere expressie als volgt:

^/[a-z0-9]+$

Dit komt overeen met tekenreeksen zoals /helloof /hello123.

Ik zou echter graag een aantal tekenreekswaarden willen uitsluiten, zoals /ignoremeen /ignoreme2.

Ik heb een paar varianten geprobeerd, maar ik krijg er geen voor elkaar!

Mijn laatste zwakke poging was

^/(((?!ignoreme)|(?!ignoreme2))[a-z0-9])+$

Alle hulp wordt zeer op prijs gesteld 🙂


Antwoord 1, autoriteit 100%

Hier is nog een andere manier (met behulp van een negatieve vooruitblik):

^/(?!ignoreme|ignoreme2|ignoremeN)([a-z0-9]+)$ 

Opmerking: er is maar één vastleggingsexpressie: ([a-z0-9]+).


Antwoord 2, autoriteit 12%

Dit zou het moeten doen:

^/\b([a-z0-9]+)\b(?<!ignoreme|ignoreme2|ignoreme3)

Je kunt zoveel genegeerde woorden toevoegen als je wilt, hier is een eenvoudige PHP-implementatie:

$ignoredWords = array('ignoreme', 'ignoreme2', 'ignoreme...');
preg_match('~^/\b([a-z0-9]+)\b(?<!' . implode('|', array_map('preg_quote', $ignoredWords)) . ')~i', $string);

Antwoord 3, autoriteit 6%

Omdat je beide woorden wilt uitsluiten, heb je een voegwoord nodig:

^/(?!ignoreme$)(?!ignoreme2$)[a-z0-9]+$

Nu moeten beide omstandigheden waar zijn (noch ignoreme noch ignoreme2 is toegestaan) om een overeenkomst te hebben.


Antwoord 4

Dit sluit alle rijen met IgnoreMe uit bij zoekresultaten. Het zal ook redelijk goed werken als er een personage op een rij

^((?!ignoreme).)*$

Antwoord 5

eenvoudiger:

re.findall(r'/(?!ignoreme)(\w+)',  "/hello /ignoreme and /ignoreme2 /ignoreme2M.")

u krijgt:

['hello']

Antwoord 6

Dit werkte voor mij:
^((?!\ignoreme1\b)(?!\ignoreme2\b)(?!\ignoreme3\b).)*$

Other episodes