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

definition of operators

  • infix means defining a middle operator (both inputs are before and after)
  • prefix means defining a prefix operator (the input is before)
  • postfix means defining a postfix operator (the input is after)

associativity

which is the calculation order when multiple operators of the same type appear in sequence

  • left (from left to right order)
  • right (from right to left order)
  • none (default is none, will not be combined again)

priority

  • priority of higherThan is higher than AdditionPrecedence this is the type of addition
  • priority of lowerThan is lower than MultiplicationPrecedence multiplicative

ثم يمكننا استخدامها

 if "[email protected]" =~ "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})$" {
  print("مطابق لمسار البريد الإلكتروني")
 }
  print("غير مطابق لمسار البريد الإلكتروني")
 }

الاحتياط

  • لاحظ استخدام رموز التحويل عند استخدام نماذج التعبير النصي.
  • لا يمكن تعريف العملاء في النطاق المحلي في Swift، لأن العملاء يجب أن يستخدموا في نطاق عالمي.
  • هناك العديد من المخاطر في إعادة تعريف وتخصيص العملاء، يرجى التأكد من أنك بحاجة إلى القيام بذلك!

الخلاصة

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون محتوى هذا المقال ذا قيمة مرجعية لدراستكم أو عملكم، يمكنكم ترك تعليقات إذا كان لديكم أي أسئلة، شكرًا لدعمكم لتعليمات النداء.

البيان: محتويات هذا المقال تم جمعها من الإنترنت، وتعود حقوق الملكية للمالك الأصلي، تم إضافة المحتوى من قبل مستخدمي الإنترنت بطرق متحفزة وبدون تدخل بشري، ويستخدم هذا الموقع فقط كوسيط وليس له حقوق الملكية، ولا يتحمل أي مسؤولية قانونية مرتبطة بذلك. إذا رأيت محتوى يشتبه في انتهاك حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال #بـ @) للإبلاغ، وقدم الدليل على الدليل، وسيتم حذف المحتوى المزعوم فور التحقق منه.

سيذهب لك