Wie schreibe ich das [a-zA-Z0-9!$* \t\r\n]
Muster neu, um den Bindestrich mit den vorhandenen Zeichen abzugleichen?
Wie schreibe ich das [a-zA-Z0-9!$* \t\r\n]
Muster neu, um den Bindestrich mit den vorhandenen Zeichen abzugleichen?
Antworten:
Entkomme dem Bindestrich.
[a-zA-Z0-9!$* \t\r\n\-]
UPDATE :
Egal, diese Antwort - Sie können den Bindestrich zur Gruppe hinzufügen, müssen ihn aber nicht umgehen. Sehen Sie sich stattdessen die Antwort von Konrad Rudolph an, die viel besser antwortet und erklärt, warum.
Der Bindestrich ist normalerweise ein normales Zeichen in regulären Ausdrücken. Nur wenn es sich um eine Zeichenklasse handelt und zwischen zwei anderen Zeichen, hat es eine besondere Bedeutung.
So:
[-]
entspricht einem Bindestrich.[abc-]
Streichhölzer a
, b
, c
oder ein Bindestrich.[-abc]
Streichhölzer a
, b
, c
oder ein Bindestrich.[ab-d]
stimmt a
mit b
, c
oder d
( nur hier bezeichnet der Bindestrich einen Zeichenbereich).[a-c-e]
: Dies ist in einigen Regex-Spezifikationen / Engines einfach ungültig. POSIX Regex zum Beispiel verbietet es.
Es ist weniger verwirrend, immer einen Escape-Bindestrich zu verwenden, damit er nicht positionsabhängig sein muss. Das ist eine \-
in der Klammer stehende Zeichenklasse.
Aber es gibt noch etwas zu beachten. Einige dieser aufgezählten Zeichen sollten möglicherweise anders geschrieben werden. Unter bestimmten Umständen sollten sie definitiv.
Dieser Vergleich der Regex-Aromen zeigt, dass C♯ einige der einfacheren Unicode-Eigenschaften verwenden kann. Wenn Sie mit Unicode arbeiten, sollten Sie wahrscheinlich die allgemeine Kategorie \p{L}
für alle möglichen Buchstaben und möglicherweise \p{Nd}
für Dezimalzahlen verwenden. Wenn Sie all diese Satzzeichen und nicht nur HYPHEN-MINUS aufnehmen möchten, sollten Sie die \p{Pd}
Eigenschaft verwenden. Vielleicht möchten Sie diese Folge von Leerzeichen auch einfach so schreiben \s
, vorausgesetzt, das ist nicht zu allgemein für Sie.
Alles in allem funktioniert das so, dass ein [\p{L}\p{Nd}\p{Pd}!$*]
beliebiges Zeichen aus diesem Satz übereinstimmt.
Ich würde das wahrscheinlich sowieso verwenden, selbst wenn ich nicht vorhatte, mich mit dem vollständigen Unicode-Set zu befassen, weil es eine gute Angewohnheit ist, sich darauf einzulassen, und weil diese Dinge oft über ihre ursprünglichen Parameter hinauswachsen. Wenn Sie es jetzt anheben, um es in einem anderen Code zu verwenden, funktioniert es weiterhin ordnungsgemäß. Wenn Sie alle Zeichen fest codieren, wird dies nicht der Fall sein.
[-a-z0-9] +, [a-z0-9 -] +, [az-0-9] + und auch [az-0-9] + sind alle gleich. Der Bindestrich zwischen zwei Bereichen wird als a betrachtet symbol.Und auch [a-z0-9 - + ()] + diese Regex erlauben Bindestrich.
Verwenden Sie "\ p {Pd}" ohne Anführungszeichen, um einem beliebigen Bindestrich zu entsprechen. Das '-' Zeichen ist nur eine Art von Bindestrich, der auch in Regex ein Sonderzeichen ist.