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

Explicación detallada del operador de expresión regular personalizado =~ en Swift

什么是正则表达式?

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

swift 至今并没有在语言层面上支持正则表达式,可能在开发app时正则表达式使用的场景并不多。

封装

在 Cocoa 中我们可以使用 NSRegularExpression 来做正则匹配,所以我们在 NSRegularExpression 的基础上封装一个 RegularExpHelper 配匹一个字符串是否符合某个正则表达式。

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

自定义 =~

有了封装好的 RegularExpHelper,我们就可以方便的自定义运算符了。

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)
 }
  return false
 }
}

definición de operador

  • infix indica la definición de un operador infix (ambas entradas son anteriores y posteriores)
  • prefix indica la definición de un operador prefix (la entrada es anterior)
  • postfix indica la definición de un operador postfix (la entrada es posterior)

associativity (asociatividad)

es el orden de cálculo cuando se presentan múltiples operadores del mismo tipo

  • left (orden de derecha a izquierda)
  • right (orden de izquierda a derecha)
  • none (por defecto es none, no se combinará)

Precedencia

  • higherThan precedencia superior a AdditionPrecedence (este es el tipo de adición)
  • lowerThan precedencia inferior a MultiplicationPrecedence (multiplicación y división)

luego podemos usarlo

 if "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.2,6})$" {
  print("Cumple con las reglas del correo electrónico")
 }
  print("No cumple con las reglas del correo electrónico")
 }

Atención

  • Tenga en cuenta el uso de caracteres de escape cuando se utilizan cadenas de expresiones regulares.
  • Los operadores de Swift no pueden definirse en dominios locales, ya que los operadores deben usarse en el rango global.
  • Existen muchos riesgos en la sobrecarga y la personalización de operadores, ¡antes de usarlos, pregúntese cuánto realmente necesita hacerlo!

Resumen

Esto es todo el contenido de este artículo. Espero que el contenido de este artículo tenga un valor de referencia para su aprendizaje o trabajo. Si tienen alguna pregunta, pueden dejar comentarios para intercambiar, gracias por el apoyo a los tutoriales de alarido.

Declaración: El contenido de este artículo se ha obtenido de la red, es propiedad de los autores originales, el contenido ha sido contribuido y subido por usuarios de Internet por su propia iniciativa. Este sitio no posee los derechos de propiedad, no ha sido editado artificialmente y no asume ninguna responsabilidad legal relacionada. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a: notice#oldtoolbag.com (al enviar un correo electrónico, por favor reemplace # con @ para denunciar, y proporcione la evidencia relevante. Una vez que se compruebe, este sitio eliminará inmediatamente el contenido sospechoso de infracción de derechos de autor.)

Te gustará