English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Detaillierte Erklärung der benutzerdefinierten regulären Ausdrucksoperators =~ in swift

Was ist ein regulärer Ausdruck?

Regulärer Ausdruck, auch bekannt als reguläre Notation, Regulärer Ausdruck (Englisch: Regular Expression, oft abgekürzt als regex, regexp oder RE), ein Konzept in der Informatik. Ein regulärer Ausdruck verwendet eine einzelne Zeichenfolge, um eine Reihe von Zeichenfolgen zu beschreiben, die einer bestimmten Syntax entsprechen. Reguläre Ausdrücke werden in vielen Texteditoren verwendet, um Texte, die einer bestimmten Muster entsprechen, zu suchen und zu ersetzen.

Swift unterstützt bislang nicht auf Sprachebene reguläre Ausdrücke, möglicherweise werden reguläre Ausdrücke in der Entwicklung von Apps nicht oft verwendet.

Verpackung

In Cocoa können wir NSRegularExpression verwenden, um reguläre Ausdrücke zu matchen, daher haben wir auf der Grundlage von NSRegularExpression einen RegularExpHelper entwickelt, um zu prüfen, ob eine Zeichenfolge einem bestimmten regulären Ausdruck entspricht.

struct RegularExpHelper {
 let RegularExp: NSRegularExpression 
 init(_ pattern: String) throws {
  try RegularExp = NSRegularExpression(pattern: pattern, options: .caseInsensitive)
 } 
 func match(inpuut: String) -> Bool {
  let matches = RegularExp.matches(in: inpuut, options: [], range: NSMakeRange(0, inpuut.count))
  return matches.count > 0
 }
}

Benutzerdefinierte =~

Mit dem bereitgestellten RegularExpHelper können wir leicht benutzerdefinierte Operatoren erstellen.

infix operator =~ : ATPrecedence
precedencegroup ATPrecedence {
 associativity: none
 higherThan: AdditionPrecedence
 lowerThan: MultiplicationPrecedence
}
func =~ (input: String, RegularExp: String) -> Bool {
 do {
  return try RegularExpHelper(RegularExp).match(inpuut: input)
 } catch _ {}}
  return false
 }
}

Operatordefinition

  • infix bedeutet, einen mittleren Operator (beide sind Eingaben) zu definieren
  • prefix bedeutet, einen vorangestellten Operator (vor dem Eingang) zu definieren
  • postfix bedeutet, einen nachfolgenden Operator (nach dem Eingang) zu definieren

Assoziativität

Das ist die Rechenreihenfolge bei der Erscheinung mehrerer ähnlicher Operatoren in der Reihenfolge

  • left (von links nach rechts geordnet)
  • right (von rechts nach links geordnet)
  • none (Standard ist none, wird nicht kombiniert)

Priorität

  • higherThan hat eine höhere Priorität als AdditionPrecedence (dies ist der Typ der Addition)
  • lowerThan hat eine niedrigere Priorität als MultiplicationPrecedence (Multiplikation und Division)

Dann können wir sie verwenden

 if "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.2,6})$" {
  print("Der E-Mail-Regel entspricht")
 } else {
  print("Nicht der E-Mail-Regel entspricht")
 }

Beachten Sie

  • Beim Verwenden von regulären Ausdruckszeichenketten beachten Sie die Verwendung von Escape-Zeichen.
  • Swift-Operatoren können nicht in lokalen Bereichen definiert werden, da Operatoren im globalen Bereich verwendet werden müssen.
  • Es gibt viele Risiken bei der Überschreibung und Anpassung von Operatoren. Bevor Sie dies tun, fragen Sie sich mehrmals, ob Sie dies wirklich benötigen!

Zusammenfassung

Das ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für Ihre Lern- oder Arbeitsaktivitäten eine gewisse Referenzwertigkeit hat. Wenn Sie Fragen haben, können Sie Kommentare hinterlassen und Austausch betreiben. Vielen Dank für Ihre Unterstützung für die Anleitungshilfe.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet entnommen und gehört dem Urheberrechtsinhaber. Der Inhalt wurde von Internetbenutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht von Hand bearbeitet. Diese Website übernimmt keine rechtlichen Verantwortlichkeiten. Wenn Sie Inhalte finden, die möglicherweise Urheberrechtsverletzungen darstellen, senden Sie bitte eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Meldung senden, und fügen Sie relevante Beweise bei. Sobald überprüft, wird diese Website die涉嫌侵权的Inhalte sofort löschen.)

Vermutlich auch Ihnen gefallen