RegexBuilder DSL
أنشئ تعبيرات Regex باستخدام منشئ سهل القراءة.
RegexBuilder DSL درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.
لغة RegexBuilder
تصبح التعبيرات النمطية الحرفية المعقدة صعبة القراءة. تتيح لك وحدة RegexBuilder بناء الأنماط من شيفرة Swift باستخدام DSL تعتمد على result-builder، مع مكونات وأنواع مُسمّاة.
استيراد RegexBuilder
استورد الوحدة، ثم أنشئ Regex باستخدام الباني Regex { ... }. ويمثل كل سطر بداخله جزءًا متتابعًا من النمط.
import RegexBuilder
let re = Regex {
"ID-"
OneOrMore(.digit)
}
print("ID-42".contains(re))OneOrMore
يطابق OneOrMore(...) عنصرًا واحدًا أو أكثر من المكوّن المحدد، وهو مكافئ لـ +. أما .digit فهي فئة أحرف مضمّنة.
import RegexBuilder
let number = Regex {
OneOrMore(.digit)
}
if let m = "abc789".firstMatch(of: number) {
print(m.0)
}ZeroOrMore وOptionally
يمثل ZeroOrMore الرمز *، وتمثل Optionally الرمز ?. وتجعلمان أجزاء النمط قابلة للتكرار أو التجاوز.
import RegexBuilder
let re = Regex {
"color"
Optionally("u")
"r"
}
print("colour".wholeMatch(of: re) != nil)
print("color".wholeMatch(of: re) != nil)Capture
تنشئ Capture { ... } مجموعة التقاط. وتظهر السلسلة الفرعية المطابقة في tuple الناتج، تمامًا كما يحدث مع الأقواس في التعبير الحرفي.
import RegexBuilder
let re = Regex {
"v"
Capture { OneOrMore(.digit) }
}
if let m = "v123".wholeMatch(of: re) {
print("Version: \(m.1)")
}تحويل الالتقاطات
يمكن أن يتضمن Capture إغلاق تحويل يحوّل النص المطابق إلى قيمة ذات نوع محدد، بحيث يكون الناتج من النوع Int أو من نوع آخر جاهزًا للاستخدام.
import RegexBuilder
let re = Regex {
Capture {
OneOrMore(.digit)
} transform: { Int($0)! }
}
if let m = "42".wholeMatch(of: re) {
let n: Int = m.1
print(n + 1)
}CharacterClass
استخدم CharacterClass أو العناصر المضمّنة مثل .word و.whitespace، والنطاقات مثل ("a"..."z") لتحديد الأحرف المسموح بها.
import RegexBuilder
let re = Regex {
One(.word)
ZeroOrMore(("a"..."z"))
}
print("hello".contains(re))المثبتات في الباني
أضف Anchor.startOfLine وAnchor.endOfLine لإجراء تأكيدات موضعية داخل الباني.
import RegexBuilder
let re = Regex {
Anchor.startOfLine
OneOrMore(.digit)
Anchor.endOfLine
}
print("100".wholeMatch(of: re) != nil)مكونات قابلة لإعادة الاستخدام
يمكنك تخزين الأنماط الفرعية في متغيرات وتركيبها، مما يجعل التعبيرات النمطية الكبيرة معيارية وسهلة القراءة.
import RegexBuilder
let field = Reference(Substring.self)
let re = Regex {
Capture(as: field) { OneOrMore(.word) }
}
if let m = "name".firstMatch(of: re) {
print(m[field])
}التقاطات متعددة
يضيف كل Capture عنصرًا إلى الناتج بالترتيب، ولذلك يكشف محلّل التاريخ السنة والشهر واليوم كلًا على حدة.
import RegexBuilder
let date = Regex {
Capture { Repeat(.digit, count: 4) }
"-"
Capture { Repeat(.digit, count: 2) }
}
if let m = "2024-05".wholeMatch(of: date) {
print("\(m.1) / \(m.2)")
}اختيار DSL أو التعبير الحرفي
استخدم التعبيرات الحرفية للأنماط القصيرة، وDSL للأنماط الطويلة التي تستفيد من الأسماء والأنواع وعمليات التحويل. وهما قابلان للتبادل، بل ويمكن تداخلهما أيضًا.
import RegexBuilder
let re = Regex {
"#"
Capture { /[0-9a-fA-F]{6}/ }
}
if let m = "#FF8800".wholeMatch(of: re) {
print("Hex: \(m.1)")
}تحقق سريع
ما مكوّن RegexBuilder الذي يطابق شيئًا واحدًا أو أكثر؟
مراجعة
تنشئ DSL الخاصة بـ RegexBuilder تعبيرات نمطية من شيفرة Swift باستخدام Regex { }، مع OneOrMore وOptionally وCapture مع التحويلات، وفئات الأحرف، والمثبتات. وهي تجعل الأنماط المعقدة سهلة القراءة وآمنة من ناحية الأنواع. ستعدّل النص في الخطوة التالية باستخدام الاستبدال والتقسيم.
الأسئلة الشائعة
هل درس «RegexBuilder DSL» مجاني؟
نعم — نص درس «RegexBuilder DSL» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.
ماذا ستتعلم في «RegexBuilder DSL»؟
أنشئ تعبيرات Regex باستخدام منشئ سهل القراءة. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «RegexBuilder DSL»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ثوابت Regex ومطابقتها
- مجموعات الالتقاط
- RegexBuilder DSL
- استبدال النص وتقسيمه