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

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

演算子の定義

  • infix は中位演算子(入力が前後)を定義する意味です
  • prefix は前位演算子(入力が前)を定義する意味です
  • postfix は後位演算子(入力が後)を定義する意味です

結合律

同じ種類の演算子が複数連続して出現した場合の計算順序です

  • left (左から右の順序)
  • right(右から左への順序)
  • none(デフォルトで none、再結合はしません)

優先順位

  • higherThan は AdditionPrecedence(加法のタイプ)よりも高い優先順位です
  • lowerThan は MultiplicationPrecedence(乗除)の優先順位よりも低いです

それでは、使用できるようになります

 if "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.2,6print("メールルールに合致します")
  else {
 }
  print("メールルールに合致しません")
 }

注意

  • 正規表現の文字列を使用する際には、エスケープシーケンスの使用に注意してください。
  • Swiftの演算子はローカルスコープで定義することはできません。なぜなら、演算子はグローバルスコープで使用される必要があるからです。
  • オーバーロードとカスタム演算子には多くのリスクがあります。使用する前に、本当にこれが必要かどうかをよく考えてください!

まとめ

これでこの記事のすべての内容が終わりました。この記事の内容が皆様の学習や仕事に参考になることを願っています。何かご不明な点があれば、コメントを残して交流してください。皆様の「呐喊教程」へのサポートに感謝します。

声明:本文の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしたものです。本サイトは所有権を持ちません。また、人工的な編集もなく、関連する法的責任も負いません。著作権に疑問がある場合は、メール:notice#wまでご連絡ください。3codebox.com(メールを送信する際には、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認が取れましたら、本サイトは直ちに侵害される可能性のあるコンテンツを削除します。

おすすめ