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)
 } 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("이메일 규칙에 맞지 않음")
 }

주의

  • 정규 표현식 문자열을 사용할 때는 escape 문자의 사용을 주의하세요.
  • 스위프트의 연산자는 전역 범위에서 사용해야 하므로, 지역 범위에서 정의할 수 없습니다.
  • 오버로드와 사용자 정의 연산자는 많은 위험을 가지고 있으며, 사용하기 전에 자신이 정말로 이렇게 할 필요가 있는지 여러 번 생각해 보세요!

정리

이 문서의 모든 내용이 끝났습니다. 이 문서의 내용이 여러분의 학습이나 업무에 참고 가치가 있기를 바랍니다. 의문이 있으시면 댓글을 남겨 주시기 바랍니다. 감사합니다. 얕적 가이드에 대한 지지에 감사합니다.

언급: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 본문의 저작권을 가지고 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 의심되는 내용이 있으시면, notice#w 이메일로 보내 주시기 바랍니다.3codebox.com(이메일을 보내는 경우 #을 @으로 변경하십시오. 신고하시고 관련 증거를 제공하시면, 실제로 확인되면 이 사이트는 즉시 의심스러운 저작권 내용을 삭제합니다.

추천 합니다