it-swarm-eu.dev

Regulární výraz vylučuje sadu klíčových slov

Chci výraz, který se nezdaří, když narazí na slova jako "boon.ini" a "http". Cílem by bylo vzít tento výraz a být schopen konstruovat pro libovolný soubor klíčových slov.

45
kae
^(?:(?!boon\.ini|http).)*$\r?\n?

(převzato z Knihovna RegexBuddy ) bude odpovídat libovolnému řádku, který neobsahuje boon.ini a/nebo http. To je to, co jste chtěli?

46
Tim Pietzcker

Alternativní výraz, který lze použít:

^(?!.*IgnoreMe).*$

^ = označuje začátek řádku 
$ = označuje konec řádku 
(?! Expression) = znamená, že se na výrazu bude zobrazovat záporná nulová šířka

^ vepředu je potřeba, jinak, když se vyhodnotí negativní výhled dopředu, může začít od někde uvnitř/za textem 'IgnoreMe' - a udělat zápas tam, kde to nechcete.

např. Pokud používáte regex: 

(?!.*IgnoreMe).*$

Se vstupem „Hello IgnoreMe Please“ to bude mít za následek něco jako: „gnoreMe Please“, protože negativní výhled do budoucna zjistí, že po 'I' neexistuje úplný řetězec 'IgnoreMe'.

14
Tim

Spíše než negovat výsledek uvnitř výrazu, měli byste to udělat v kódu. Tímto způsobem se výraz stává velmi jednoduchým.

\b(boon\.ini|http)\b

Vrátil by true pokud boon.ini nebo http byl kdekoli v řetězci. Nebude odpovídat slovům jako httpd nebo httpxyzzy kvůli hranicím \b nebo Word. Pokud chcete, můžete je jen odstranit a bude to také odpovídat. Chcete-li přidat další klíčová slova, přidejte další trubky.

\b(boon\.ini|http|foo|bar)\b
13
Justin Poliey

můžete být dobře sloužil tím, že napíše regex, který bude uspět když se setká se slovy, které hledáte, a pak stav převrátit.

Například v jazyce Perl byste použili:

if (!/boon\.ini|http/) {
    # the string passed!
}
4
Nathan Fellman
^[^£]*$

Výše uvedený výraz omezí pouze symbol libry z řetězce. To umožní všechny znaky kromě řetězce.

2
Manikandan

Která knihovna/regexp knihovna? Myslel jsem, že máte otázku kolem ASP.NET, v tomto případě můžete vidět "negativní lookhead" v tomto článku: http://msdn.Microsoft.com/en-us/library/ms972966. aspx

Striktně řečeno negace regulárního výrazu, stále definuje běžný jazyk, ale existuje jen velmi málo knihoven/jazyků/nástrojů, které umožňují vyjádřit jej.

Negativní lookahed vám může sloužit stejně, ale skutečná syntaxe závisí na tom, co používáte. Timova odpověď je příkladem (?...)

1
Remo.D

Použil jsem (na základě odpovědi od Tim Pietzcker) k vyloučení neprodukčních subdomén URL adres pro filtry profilu Google Analytics:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$

Kontext zde můžete vidět zde: Regex pro vyloučení více slov

0
Jon Kern