2016-06-07 5 views
1

Ich bin für einen regulären Ausdruck suchen, die Wörter mit einem bestimmten Muster entsprechen (siehe unten), aber die enthält nicht eine von drei bestimmten WörternString mit einem Muster übereinstimmen und nicht ein paar Worte enthalten

Das Muster ist

[a-zA-Z0-9_~+-]{1,64} 

und die Worte, die ich nicht wollen, sind in der ganzen Wort enthalten sein ‚TEST‘, ‚Specific1‘ und ‚Specific2‘

Bisher fand ich eine Regex diese Worte nicht übereinstimmen:

((?!(TEST|SPECIFIC1|SPECIFIC2)).)* 

aber ich kann nicht finden, wie man diese zwei Regex kombiniert.

Zum Beispiel:

TEST   won't match 
TES$   won't match 
SPECIFIC1  won't match 
NON-SPECIFIC2 won't match 
SPECIFIC2  won't match 
MATCHES   will match 
test   will match 

Hat jemand eine Idee?

+0

Es ist einfacher, alles, was Sie wollen, zu vergleichen und dann eine Bedingung zu schreiben. – Maroun

+0

Leider muss ich nur eine Regex haben, um den Job zu machen –

+0

So ist der Code. Es benötigt eine Regex –

Antwort

2

Wenn Sie den Ausdruck mit ^ und $ umgeben, können Sie den negativen Lookahead zusammen mit Ihrer Zeichenklasse setzen, um dies zu erreichen.

^((?!(TEST|SPECIFIC1|SPECIFIC2))[a-zA-Z0-9_~+-]){1,64}$ 

Here's eine Demonstration. Beachten Sie, dass hierbei die Flags global und multiline verwendet werden, sodass ich zu Demonstrationszwecken eine Übereinstimmung pro Zeile haben kann.

Ohne ^ und $ kann das Muster einfach verschoben werden, um eine Übereinstimmung mit den verbotenen Strings zu vermeiden.

+1

Vielen Dank aber dies Regex wird Wörter mit 'TEST' darin abgleichen, wie testTESTtest –

+0

Aktualisiert Regex und Link, so dass es * testTESTtest * nicht übereinstimmt. – Raniz

+0

Es funktioniert !! Vielen Dank –

Verwandte Themen