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

Подробное объяснение использования оператора =~ для пользовательских регулярных выражений в swift

Что такое регулярное выражение?

Регулярное выражение, также известное как регулярное представление, обычное представление (на английском языке: Regular Expression, часто сокращается до regex, regexp или RE), это концепция в области компьютерных наук. Регулярное выражение использует один字符串 для описания и соответствия набору строк, соответствующих определенным правилам синтаксиса. Во многих текстовых редакторах регулярные выражения обычно используются для поиска и замены текста, соответствующего определенному шаблону.

Swift до сих пор не поддерживает регулярные выражения на уровне языка, возможно, в разработке приложений использование регулярных выражений не так часто.

Обертка

В Cocoa мы можем использовать 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)
 catch _ {
  return false
 }
}

определение оператора

  • infix означает определение оператора между вводом
  • prefix означает определение оператора до ввода
  • postfix означает определение оператора после ввода

ассоциативность

Это порядок вычислений при возникновении нескольких одинаковых операторов

  • left (по направлению справа налево)
  • right (по направлению слева направо)
  • none (по умолчанию none, не будет комбинироваться)

Приоритет

  • higherThan приоритет выше AdditionPrecedence это тип сложения
  • lowerThan приоритет ниже MultiplicationPrecedence умножение

Тогда мы можем использовать это

 if "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
  print("Соответствует правилам электронной почты")
 }
  print("Не соответствует правилам электронной почты")
 }

Внимание

  • При использовании строк регулярных выражений обратите внимание на использование символов escaping.
  • Операторы Swift не могут быть определены в локальной области, так как операторы должны использоваться в глобальном масштабе.
  • Существует много рисков, связанных с перегрузкой и определением операторов, перед использованием, пожалуйста, часто задавайте себе вопрос, действительно ли вам нужно это делать!

Обобщение

Вот и все, что есть в этой статье, надеюсь, что содержимое статьи будет иметь определенную ценность для вашего обучения или работы, если у вас есть вопросы, вы можете оставлять комментарии для обсуждения, спасибо за поддержку呐喊 руководства.

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, содержимое предоставлено пользователями Интернета, сайт не обладает правами собственности, не был обработан вручную, и не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. При подтверждении факта нарушения сайт незамедлительно удалят涉嫌侵权的内容。

Рекомендуется для вас