Regex-Muster - lassen Sie die alpha-numerischen, eine Reihe von besonderen chars, aber nicht eine bestimmte Reihenfolge der chars
Habe ich folgenden regex:
(?!^[&#]*$)^([A-Za-z0-9-'.,&@:?!()$#/\\]*)$
Also erlauben, A-Z, A-Z, 0-9, - und diese Besondere chars '.,&@:?!()$#/\
Will ich NICHT entsprechen, wenn die folgenden chars begegnet, die überall in der Zeichenfolge in dieser Reihenfolge:
&#
Wenn ich mit dieser regex nur mit "&#" als Eingang, es entspricht nicht meinem Muster, bekomme ich eine Fehlermeldung, Super. Wenn ich die regex mit '.,&@:?!()$#/\ABC123
passt mein Muster, keine Fehler.
Aber wenn ich es laufen mit:
'.,&#@:?!()$#/\ABC123
Es keine Fehler. Mache ich etwas falsch mit dem check für die &# Sequenz.
Kann mir jemand sagen was ich falsch gemacht habe, ich bin nicht groß mit diesen Dingen.
InformationsquelleAutor John Batdorf | 2009-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anlehnung an ein Verfahren für den Abgleich von Zeichenfolgen, entfernen
&
von Ihrem Charakter-Klasse fügen Sie eine alternative für&
nicht gefolgt von#
, und lassen Sie die Zeichenfolge Optional Ende mit&
:Dies würde es auch erlauben, Sequenzen wie "&∆" in der Erwägung, dass ∆ ist eine
[^#]
e. g. "_", "<", ">", usw. So wäre das folgende besser: ^(?:[A-Za-z0-9-'.,@:?!()$#/\]+|&[A-Za-z0-9-'.,@:?!()$/\])*$InformationsquelleAutor Ben Blank
Ich würde es wirklich tun in zwei Teile:
[^A-Za-z0-9'\.&@:?!()$#^]
Du nicht erwähnt, dass Ihre Sprache, aber wenn in C#:
InformationsquelleAutor Joel Coehoorn
^((?!&#)[A-Za-z0-9-'.,&@:?!()$#/\\])*$
beachten Sie, dass die last \ maskiert (gedoppelt)
SO stellt sich automatisch
\\
in \ wenn nicht in backticksInformationsquelleAutor foson
Vorausgesetzt, Perl-kompatible RegExp
Nicht übereinstimmen auf die Zeichenfolge " &#':
Obwohl Sie nicht brauchen, die Klammer, weil Sie sind passend, die gesamte Zeichenfolge.
InformationsquelleAutor Rob
Nur zur info, obwohl Ben Blank regex funktioniert, es ist komplizierter als es sein muss. Ich würde es so machen:
Daran, dass ich eine negative lookahead-statt einer negierten Zeichenklasse, die regex braucht keine zusätzliche Hilfe zu match ein kaufmännisches und-Zeichen am Ende der Zeichenfolge.
InformationsquelleAutor Alan Moore
Ich würde empfehlen, mit zwei regulären Ausdrücken in bedingten:
Ich glaube, dass Ihre zweite "main" regex von
hat mehrere Fehler:
\
Zeichen in regulären Ausdrücken ist ein token, der angibt, dass das nächste Zeichen ist Teil einer Art "Klasse" von Zeichen (ex.\n
= Zeilenvorschub-Zeichen). Die Zeichenfolge\]
verursacht tatsächlich Ihren eingeklammerten Liste nicht gekündigt werden.Sollten Sie vielleicht besser mit
Beachten Sie, dass der Schrägstrich wird vertreten durch einen Doppel-slash.
Den
+
Zeichen zeigt an, dass mindestens ein Charakter getestet hat, um die regex; wenn es in Ordnung ist, übergeben Sie eine Zeichenfolge mit der Länge null, ersetzen Sie die+
mit einem*
.Übrigens, wenn John wirklich hatte versehentlich entging die schließende eckige Klammer, die regex würde nicht selbst zusammengestellt haben.
InformationsquelleAutor Perry Pederson