web-dev-qa-db-de.com

Zeichen in regulärem Ausdruck negieren

Wie schreibe ich einen regulären Ausdruck, der den folgenden Kriterien entspricht?

  • Keine zahlen
  • Keine Sonderzeichen
  • Kein Platz

in einer Schnur

25
nimi

Das Einfügemarke in einer Zeichenklasse [^] ist der Negationsoperator, der den meisten Implementierungen regulärer Ausdrücke (Perl, .NET, Ruby, Javascript usw.) gemeinsam ist. Also würde ich es so machen:

[^\W\s\d]
  • ^ - Stimmt mit irgendetwas NICHT in der Zeichenklasse überein
  • \ W - entspricht Nicht-Word-Zeichen (ein Word-Zeichen würde als a-z, A-Z, 0-9 und Unterstrich definiert).
  • \ s - entspricht Leerzeichen (Leerzeichen, Tabulator, Wagenrücklauf, Zeilenvorschub)
  • \ d - entspricht 0-9

Oder Sie können einen anderen Ansatz wählen, indem Sie einfach nur das eingeben, was Sie möchten:

[A-Za-z]

Der Hauptunterschied besteht darin, dass der erste Unterstrich enthält. Das zeigt, wie der Ausdruck so geschrieben wird, wie Sie denken. Wenn Sie jedoch umgekehrt denken, dass Sie Zeichen einschließen, anstatt sie auszuschließen, führt dies manchmal zu einem besser lesbaren regulären Ausdruck. 

Es ist mir nicht ganz klar, welche Sonderzeichen Sie nicht wollen. Ich habe beide Lösungen geschrieben, nur für den Fall, dass eine für Sie besser ist als die andere.

61
Steve Wortham

In Perl würde es ungefähr so ​​aussehen:

$string !~ /[\d \W]/

Natürlich hängt es von Ihrer Definition von "Sonderzeichen" ab. \W stimmt mit allen Nicht-Word-Zeichen überein. Ein Word-Zeichen ist ein beliebiges alphanumerisches Zeichen plus Leerzeichen.

2
Thomas Owens

Das Wichtigste, was Sie über reguläre Ausdrücke lernen können, ist nicht ihre Syntax, sondern die Fähigkeit, klar zu erklären, wonach Sie suchen. Das sind wirklich 90% des Problems.
Außerdem ist es normalerweise besser, anzugeben, was Sie wollen, als was Sie nicht wollen.

1
Matteo Riva

Versuchen Sie ^ [^ 0-9\p {P}] $

0
Paul McLean