Go Academy · درس

العثور والاستخراج

استخدم FindString والمطابقات الفرعية

الدرس 2 من 413 خطوة

العثور والاستخراج درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما بعد المطابقة

تخبرك المطابقة ما إذا كان النمط موجودًا. أما عائلة Find فتخبرك بما تمت مطابقته وبموضعه، لتتمكن من استخراج البيانات.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindString("order 42 ready"))
}

FindString

تعيد FindString(s) أول تطابق كسلسلة نصية، أو سلسلة نصية فارغة إذا لم يوجد تطابق.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    fmt.Printf("%q\n", re.FindString("123abc456"))
}

FindAllString

تعيد FindAllString(s, n) كل التطابقات على شكل شريحة. مرّر -1 للحصول على جميع التطابقات، أو حدًا موجبًا.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("a1 b22 c333", -1))
}

تحديد عدد النتائج

مرّر قيمة موجبة إلى n لإيقاف البحث بعد الوصول إلى ذلك العدد من التطابقات.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.FindAllString("1 2 3 4", 2))
}

العثور على الفهرس

تعيد FindStringIndex(s) موضعي بداية ونهاية أول تطابق بالبايت على شكل شريحة من عنصرين.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("cat")
    fmt.Println(re.FindStringIndex("a cat here"))
}

مجموعات الالتقاط

تنشئ الأقواس مجموعات التقاط. وتعيد FindStringSubmatch التطابق الكامل أولًا، ثم كل مجموعة ملتقطة.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)-(\\d+)")
    m := re.FindStringSubmatch("12-34")
    fmt.Println(m)
}

استخدام قيم التطابقات الفرعية

استخدم الفهرس للوصول إلى شريحة التطابقات الفرعية: العنصر 0 هو التطابق الكامل، والعنصر 1 هو المجموعة الأولى، وهكذا.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+):(\\d+)")
    m := re.FindStringSubmatch("09:30")
    fmt.Println("hour", m[1], "min", m[2])
}

المجموعات المسماة

سمِّ المجموعة باستخدام (?P<name>...)، ثم اقرأ اسمها عبر SubexpNames إلى جانب شريحة التطابقات الفرعية.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?P<area>\\d{3})-(?P<num>\\d{4})")
    m := re.FindStringSubmatch("555-1234")
    for i, name := range re.SubexpNames() {
        if name != "" {
            fmt.Println(name, m[i])
        }
    }
}

جميع التطابقات الفرعية

تعيد FindAllStringSubmatch(s, n) شريحة من شرائح التطابقات الفرعية، واحدة لكل تطابق. وهذا مناسب جدًا لتحليل سجلات متعددة.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)=(\\d+)")
    all := re.FindAllStringSubmatch("x=1 y=2", -1)
    for _, m := range all {
        fmt.Println(m[1], m[2])
    }
}

السلوك عند عدم وجود تطابق

عندما لا يطابق شيء، تعيد طرائق Find سلسلة نصية فارغة أو شريحة nil. تحقق من النتيجة قبل استخدام الفهرس لتجنب حدوث panic.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    m := re.FindStringSubmatch("no digits")
    fmt.Println(m == nil)
}

استخراج بيانات حقيقية

اجمع المجموعات لاستخراج الحقول المنظمة من سطر نصي.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d{4})-(\\d{2})-(\\d{2})")
    m := re.FindStringSubmatch("date: 2026-05-30")
    fmt.Println("year", m[1])
}

تحقق سريع

أي عنصر في شريحة التطابقات الفرعية يمثل التطابق الكامل؟

مراجعة: العثور والاستخراج

يمكنك الآن استخراج البيانات من النصوص:

  • تعيد FindString وFindAllString التطابقات.
  • تعيد FindStringSubmatch التطابق الكامل بالإضافة إلى مجموعات الالتقاط.
  • استخدم المجموعات المسماة، وتحقق من nil عند عدم وجود تطابق.
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)@(\\w+)")
    m := re.FindStringSubmatch("user@host")
    fmt.Println(m[1], "at", m[2])
}
البدء مجانًا

تعلم Go مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

الأسئلة الشائعة

هل درس «العثور والاستخراج» مجاني؟

نعم — نص درس «العثور والاستخراج» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «العثور والاستخراج»؟

استخدم FindString والمطابقات الفرعية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «العثور والاستخراج»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات regexp
  2. العثور والاستخراج
  3. استبدال النصوص
  4. نصائح الأداء
← العودة إلى Go Academy