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

Spiegazione dettagliata dell'operatore di espressione regolare personalizzata =~ in Swift

Cos'è un'espressione regolare?

Espressione regolare, anche chiamata rappresentazione regolare, rappresentazione convenzionale (in inglese: Regular Expression, spesso abbreviata in regex, regexp o RE), un concetto della scienza informatica. L'espressione regolare utilizza una singola stringa per descrivere e abbinare una serie di stringhe che seguono una certa regola sintattica. In molti editor di testo, l'espressione regolare viene spesso utilizzata per cercare e sostituire il testo che corrisponde a un certo modello.

Swift non supporta ancora le espressioni regolari a livello linguistico, quindi potrebbe non essere necessario utilizzare le espressioni regolari molto spesso durante la sviluppo di app.

Encapsulamento

In Cocoa possiamo utilizzare NSRegularExpression per eseguire la corrispondenza regolare, quindi abbiamo creato un encapsulamento di RegularExpHelper per verificare se una stringa corrisponde a un'espressione regolare.

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
 }
}

Personalizzazione =~

Con l'aiuto di RegularExpHelper ben encapsulato, possiamo personalizzare facilmente gli operatori.

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
 }
}

Definizione degli operatori

  • infix indica la definizione di un operatore infix (entrambi i due input)
  • prefix indica la definizione di un operatore prefix (prima dell'input)
  • postfix indica la definizione di un operatore postfix (dopo l'input)

Associativity (legge)

cioè l'ordine di calcolo quando più operatori dello stesso tipo appaiono consecutivamente

  • left (in ordine da sinistra a destra)
  • right (in ordine da destra a sinistra)
  • none (per default è none, non verrà combinato)

Priorità

  • higherThan ha una priorità superiore a AdditionPrecedence (questo è il tipo di addizione)
  • lowerThan ha una priorità inferiore a MultiplicationPrecedence (precedenza moltiplicazione)

Poi possiamo usarlo

 if "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
  print("Soddisfa le regole di posta elettronica")
 }
  print("Non soddisfa le regole di posta elettronica")
 }

Attenzione

  • Quando si utilizza una stringa di espressione regolare, prestare attenzione all'uso dei caratteri di escape.
  • Gli operatori di Swift non possono essere definiti in un'area locale, perché gli operatori devono essere utilizzati su scala globale.
  • Ci sono molti rischi nel sovraccaricare e personalizzare gli operatori, assicurati di chiederti spesso se davvero hai bisogno di farlo!

Sommario

Questo è tutto il contenuto dell'articolo, speriamo che il contenuto di questo articolo abbia un valore di riferimento o di studio per voi. Se avete domande, potete lasciare un messaggio per scambiare opinioni, grazie per il supporto di tutti alla guida a urlo.

Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, il copyright spetta ai rispettivi proprietari, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare