Der Rest sucht entweder nach Leerzeichen, aber nicht nach Leerzeichen oder hat die Negation an der falschen Stelle, um sie tatsächlich zu negieren.
Zachary Scott
\ w fängt auch Unterstriche - was ein nicht alphanumerischer Charakter ist
Tudor Constantin
Aha! Ich werde modifizieren - das wusste ich nicht. Ich erwarte, dass es für verschiedene Motoren unterschiedlich funktioniert, könnte aber genauso gut dem OP die sichere Antwort geben.
Luke Sneeringer
2
Herabgestuft, da dadurch weder nicht-lateinische Zeichen noch "spezielle" lateinische Zeichen erfasst werden.
Damian
16
Wenn Sie lateinische Zeichen mit Akzent (z. B. à Ñ) als normale Buchstaben behandeln möchten (dh vermeiden, dass sie auch übereinstimmen), müssen Sie auch den entsprechenden Unicode-Bereich ( \ u00C0- \ u00FF ) in Ihre Regex aufnehmen würde so aussehen:
/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
^ negiert was folgt
a-zA-Z stimmt mit Groß- und Kleinbuchstaben überein
\d stimmt mit den Ziffern überein
\s stimmt mit Leerzeichen überein (wenn Sie nur Leerzeichen abgleichen möchten, ersetzen Sie diese durch ein Leerzeichen)
: entspricht einem Doppelpunkt
\u00C0-\u00FF Entspricht dem Unicode-Bereich für lateinische Zeichen mit Akzent.
nb. Die Unicode-Bereichsanpassung funktioniert möglicherweise nicht für alle Regex-Engines, aber das oben Genannte funktioniert sicherlich in Javascript (wie in diesem Stift auf Codepen zu sehen).
nb2. Wenn Sie sich über passende Unterstrichen nicht gestört sind, könnten Sie ersetzen a-zA-Z\dmit \w, die Buchstaben, Ziffern übereinstimmt und Unterstrichen.
Dieser Bereich enthält einige Zeichen, die nicht alphanumerisch sind (U + 00D7 und U + 00F7), und schließt viele gültige Zeichen mit Akzent aus nicht-westlichen Sprachen wie Polnisch, Tschechisch, Vietnamesisch usw. aus
Tripleee
1
Upvoted für die Beschreibung jedes Teils der RegEx.
Herabgestuft, da dadurch weder nicht-lateinische Zeichen noch "spezielle" lateinische Zeichen erfasst werden.
Damian
14
Es ist leicht, eine Antwort herunterzustimmen, und noch schwieriger, konstruktive Informationen an die Tafel zu liefern, z. B. wie fängt man dann nicht-lateinische Zeichen oder "spezielle" lateinische Zeichen ab? Nach meiner Zählung bis hierher haben Sie aus demselben Grund 3 Antworten abgelehnt, und meiner Meinung nach für eine eher geringfügige Änderung. Zum Beispiel bin ich hier, um einen regulären Ausdruck für genau das zu finden, was in diesen Antworten besprochen wird. Zeichensätze, die in meiner Anwendung nicht verwendet werden, interessieren mich nicht. Gesetz des abnehmenden Ertrags.
Aaron mag für einen US-Bürger eine "kleine Veränderung" sein, aber für ... den Rest dieses Planeten von hoher Relevanz.
Michael K. Borregaard
4
Keine alphanumerischen Zeichen, Leerzeichen oder '_'.
Dies ist hier die einzige Antwort, die richtig mit Unicode-akzentuierten Alphabeten umgeht. Leider unterstützen nicht alle Regex-Engines diese Funktion (selbst Python fehlt sie ab Version 3.8, obwohl die Regex-Engine angeblich PCRE-basiert ist).
Tripleee
1
Ich werde Python aus der Antwort entfernen, ich dachte, ich hätte das getestet, aber anscheinend nicht. Vielen Dank für den Hinweis.
Dies scheint die akzeptierte Antwort aus dem Jahr 2011 zu wiederholen. Die Anker ^und $beschränken sie auf ganze Zeilen, und der *Quantifizierer bedeutet, dass sie auch mit leeren Zeilen übereinstimmen.
Tripleee
0
In JavaScript:
/[^\w_]/g
^Negation, dh wählen Sie etwas aus, das nicht im folgenden Satz enthalten ist
\w ein beliebiges Wortzeichen (dh ein beliebiges alphanumerisches Zeichen plus Unterstrich)
_ negiere den Unterstrich, da er als Wortzeichen betrachtet wird
/[^a-zA-Z0-9\s\:]*/
Antworten:
quelle
\d
und\s
sind Perl - Erweiterungen , die sind in der Regel nicht von den älteren Tool unterstützt wiegrep
,sed
,tr
,lex
etc.Dies sollte es tun:
quelle
Wenn Sie lateinische Zeichen mit Akzent (z. B. à Ñ) als normale Buchstaben behandeln möchten (dh vermeiden, dass sie auch übereinstimmen), müssen Sie auch den entsprechenden Unicode-Bereich ( \ u00C0- \ u00FF ) in Ihre Regex aufnehmen würde so aussehen:
^
negiert was folgta-zA-Z
stimmt mit Groß- und Kleinbuchstaben überein\d
stimmt mit den Ziffern überein\s
stimmt mit Leerzeichen überein (wenn Sie nur Leerzeichen abgleichen möchten, ersetzen Sie diese durch ein Leerzeichen):
entspricht einem Doppelpunkt\u00C0-\u00FF
Entspricht dem Unicode-Bereich für lateinische Zeichen mit Akzent.nb. Die Unicode-Bereichsanpassung funktioniert möglicherweise nicht für alle Regex-Engines, aber das oben Genannte funktioniert sicherlich in Javascript (wie in diesem Stift auf Codepen zu sehen).
nb2. Wenn Sie sich über passende Unterstrichen nicht gestört sind, könnten Sie ersetzen
a-zA-Z\d
mit\w
, die Buchstaben, Ziffern übereinstimmt und Unterstrichen.quelle
Versuche dies:
JavaScript-Beispiel:
Sehen Sie sich ein Online-Beispiel an:
http://jsfiddle.net/vhMy8/
quelle
Keine alphanumerischen Zeichen, Leerzeichen oder '_'.
quelle
Wenn Sie "nicht alphanumerische Zeichen" meinen, versuchen Sie Folgendes:
quelle
Diese Regex funktioniert für C # , PCRE und Go, um nur einige zu nennen.
Es funktioniert nicht für JavaScript in Chrome, wie RegexBuddy sagt. Dafür gibt es hier aber schon ein Beispiel.
Dieser Hauptteil davon ist:
\p{L}
die einen Brief aus einer beliebigen Sprache darstellt
\p{L}
oder. "\p{Letter}
Die vollständige Regex selbst:
[^\w\d\s:\p{L}]
Beispiel: https://regex101.com/r/K59PrA/2
quelle
Versuchen Sie Folgendes hinzuzufügen:
Das hat bei mir funktioniert ... :)
quelle
^
und$
beschränken sie auf ganze Zeilen, und der*
Quantifizierer bedeutet, dass sie auch mit leeren Zeilen übereinstimmen.In JavaScript:
/[^\w_]/g
^
Negation, dh wählen Sie etwas aus, das nicht im folgenden Satz enthalten ist\w
ein beliebiges Wortzeichen (dh ein beliebiges alphanumerisches Zeichen plus Unterstrich)_
negiere den Unterstrich, da er als Wortzeichen betrachtet wirdAnwendungsbeispiel -
const nonAlphaNumericChars = /[^\w_]/g;
quelle