2017-07-23 4 views
-1

Ich habe etwas Ahnung von MySQL Regexp Syntax, aber ich bin nicht kompetent. Ich suchte nach einem Weg, ein Muster zu konstruieren, das alle Namen von einer mysql Tabelle auswählt, die fremde Zeichen wegen der internationalen Eingabe enthalten, wie spanische Namen, die das Symbol über dem n haben.Kann mir jemand helfen, dieses Regex-Muster zu verstehen?

Ich kam auf dieses folgende Muster, das ich versuchte und es funktionierte.

[^[email protected]:. \'\-`,\&] 

Die Abfrage ist:

SELECT * 
FROM orders_table 
WHERE customers_name REGEXP '[^[email protected]:. \'\-`,\&]' 

aber ich möchte wissen, wie dieses Muster gebaut wurde und was jeder Teil bedeutet.

+1

[Hier] (https://regex101.com/r/zpw6ju/1) gehen Sie. – Gerry

+0

Dies wird als ** negierte Zeichenklasse ** bezeichnet: Jedes Zeichen der Klasse muss ** nicht ** vorhanden sein. – Jan

Antwort

1

Die Idee ist, dass alles zwischen [...] einer Zeichenklasse ist, die mit jedem einzelnen Zeichen übereinstimmt, das in der Menge zwischen [und] steht.

Das Hinzufügen von^zum Anfang der Liste von Zeichen bedeutet (wie oben erwähnt), dass es negiert ist, was bedeutet, dass es mit einem beliebigen Zeichen NICHT im Satz übereinstimmt. Setzen Sie ein^irgendwo anders als den Anfang des [...] bedeutet es, dass es nur ein reguläres^-Zeichen ist, um übereinzustimmen, und in keinem Fall bedeutet^innerhalb einer Zeichenklasse einen Start-of-Line-Anker.

Rang arbeitet, wie az, und wenn Sie einen wörtlichen Strich im Set wollen, entweder Sie es an erster Stelle (möglicherweise nach dem ^), oder sie zitiert mit \

Edit: die anderen Sonderzeichen - @: usw. - sind in diesem Zusammenhang nicht besonders, sie passen nur als normale Zeichen zusammen.

+1

Um die SQL-Frage zu beantworten, sieht es so aus, als würde es nach Kundennamen suchen, die Dinge enthalten ** außer **, was in der Liste steht. Wenn also ein Kundenname ein Dollarzeichen hätte, würde es übereinstimmen. –

0

[a-zA-Z0-9 @ :. \ '- `, \ &] - Betrachten wir alle wichtigen Teile dieses Musters.

[] - bezeichnet eine Zeichenklasse, die mit einem einzelnen Zeichen in [] übereinstimmt.

[a-zA-Z0-9] - Ein Zeichen (Klein- oder Großbuchstaben) im Bereich von a-z, A-Z ODER 0-9.

Alle anderen Zeichen, die innerhalb der [] vorhanden sind, passen für ein bestimmtes einzelnes Zeichen. einfache Anführungszeichen "'" und kaufmännisches Undsind durch "\" entkommen, weil in SQL, sie für bestimmte Zwecke verwendet werden.

ein Muster entsprechen, die ein Zeichen andere als jeder dieser Symbole innerhalb [] hat, verwenden wir eine Negation "^" am Anfang.

Also, wie Sie gesagt haben, wählt Ihr Muster alle Namen aus einer MySQL-Tabelle, die andere seltsame Zeichen enthalten.

Verwandte Themen