0Pricing
Go Academy · درس

استبدال النصوص

استبدل الأنماط باستخدام ReplaceAll

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

الاستبدال المستند إلى الأنماط

يمكن للتعبيرات النمطية إعادة كتابة النص، وليس البحث فيه فقط. تستبدل ReplaceAllString كل تطابق بسلسلة نصية بديلة.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.ReplaceAllString("a1b2c3", "#"))
}

استبدال الكلمات الكاملة

يتيح لك نمط مثل cat|dog استبدال عدة بدائل في عملية واحدة.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("cat|dog")
    fmt.Println(re.ReplaceAllString("my cat and dog", "pet"))
}

ضغط المسافات البيضاء

من عمليات التنظيف الشائعة استبدال سلاسل المسافات البيضاء بمسافة واحدة باستخدام \s+.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("\\s+")
    fmt.Println(re.ReplaceAllString("too   many    spaces", " "))
}

الإشارة إلى المجموعات

في النص البديل، تُدرج $1 مجموعة الالتقاط الأولى، وتُدرج $2 المجموعة الثانية. ويتيح ذلك إعادة ترتيب الأجزاء المتطابقة.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)-(\\d+)")
    fmt.Println(re.ReplaceAllString("12-34", "$2-$1"))
}

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

باستخدام المجموعات المسمّاة، يمكنكم استخدام ${name} في الاستبدال لزيادة الوضوح.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?P<y>\\d{4})-(?P<m>\\d{2})")
    fmt.Println(re.ReplaceAllString("2026-05", "${m}/${y}"))
}

الأقواس المعقوفة الآمنة

استخدموا الأقواس المعقوفة ${1} عندما يتبع مرجع المجموعة نصًّا، حتى لا يُخلط بين $1 واسم أطول.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\d+)")
    fmt.Println(re.ReplaceAllString("7", "${1}px"))
}

الاستبدال الحرفي

يتجاهل ReplaceAllLiteralString مراجع $ ويدرج نص الاستبدال كما كُتب تمامًا.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    fmt.Println(re.ReplaceAllLiteralString("a1", "$money"))
}

الاستبدال باستخدام دالة

يستدعي ReplaceAllStringFunc دالتكم لكل تطابق ويستبدله بأي قيمة تُعيدها الدالة. ويتيح ذلك إجراء استبدالات محسوبة.

package main

import (
    "fmt"
    "regexp"
    "strings"
)

func main() {
    re := regexp.MustCompile("[a-z]+")
    out := re.ReplaceAllStringFunc("go is fun", strings.ToUpper)
    fmt.Println(out)
}

الاستبدال المحسوب

داخل الدالة، يمكنكم تحويل كل تطابق بالطريقة التي تريدونها؛ وفي هذا المثال تُضاعَف كل سلسلة أرقام متطابقة بإحاطتها.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    out := re.ReplaceAllStringFunc("id5 and id9", func(m string) string {
        return "<" + m + ">"
    })
    fmt.Println(out)
}

إخفاء البيانات الحساسة

من الاستخدامات العملية: حجب الأرقام، مثل سلاسل الأرقام الشبيهة بأرقام البطاقات، قبل تسجيلها.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("\\d{4}")
    fmt.Println(re.ReplaceAllString("card 1234 5678", "****"))
}

العمل على وحدات البايت

تتوفر أيضًا إصدارات تعمل على شرائح البايت، مثل ReplaceAll، وهي تحاكي أساليب السلاسل النصية للبيانات الثنائية أو بيانات المخازن المؤقتة.

package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("[0-9]+")
    out := re.ReplaceAll([]byte("a1b2"), []byte("#"))
    fmt.Println(string(out))
}

اختبار سريع

كيف تُدرجون مجموعة الالتقاط الأولى في سلسلة استبدال؟

مراجعة: استبدال النص

لقد تعلمتم إعادة كتابة النصوص:

  • يستبدل ReplaceAllString التطابقات؛ ويشير $1/${name} إلى المجموعات.
  • يتخطى ReplaceAllLiteralString توسيع المراجع.
  • يحسب ReplaceAllStringFunc كل استبدال.
package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(\\w+)\\s(\\w+)")
    fmt.Println(re.ReplaceAllString("Ada Lovelace", "$2, $1"))
}

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

هل درس «استبدال النصوص» مجاني؟

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

ماذا ستتعلم في «استبدال النصوص»؟

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

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

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

كم من الوقت يستغرق درس «استبدال النصوص»؟

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

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

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

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

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