أساسيات regexp
جمّع الأنماط وطابقها
أساسيات regexp درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما التعبير النمطي؟
التعبير النمطي (regexp) هو نمط يصف مجموعة من السلاسل النصية. وتوفر Go هذه التعبيرات من خلال الحزمة regexp.
وهي مناسبة جدًا للتحقق من النصوص والبحث فيها.
package main
import (
"fmt"
"regexp"
)
func main() {
matched, _ := regexp.MatchString("go+", "gooo")
fmt.Println(matched)
}مطابقة سريعة باستخدام MatchString
تحدد regexp.MatchString(pattern, s) ما إذا كان النمط يظهر في أي موضع داخل s. وتعيد قيمة منطقية وخطأً.
package main
import (
"fmt"
"regexp"
)
func main() {
ok, _ := regexp.MatchString("cat", "the cat sat")
fmt.Println(ok)
}تجميع نمط
للاستخدام المتكرر، جمّع النمط مرة واحدة باستخدام regexp.Compile. فهي تعيد قيمة *regexp.Regexp قابلة لإعادة الاستخدام، وخطأً إذا كان النمط غير صالح.
package main
import (
"fmt"
"regexp"
)
func main() {
re, err := regexp.Compile("[0-9]+")
fmt.Println(re.MatchString("abc123"), err)
}استخدام MustCompile للثوابت
تتسبب regexp.MustCompile في panic إذا كان النمط غير صالح. استخدمها للأنماط الثابتة المعروفة وقت الترجمة، وعادةً ما تكون في متغيرات على مستوى الحزمة.
package main
import (
"fmt"
"regexp"
)
var digits = regexp.MustCompile("[0-9]+")
func main() {
fmt.Println(digits.MatchString("order 42"))
}فئات المحارف
تحدد الأقواس المربعة مجموعة المحارف المسموح بها. تطابق [aeiou] أي حرف علة، بينما تطابق النطاقات مثل [a-z] مجموعة متتابعة من المحارف.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[a-z]+")
fmt.Println(re.MatchString("Hello"))
}الفئات المحددة مسبقًا
تسهّل الاختصارات استخدام المجموعات الشائعة: تمثل \d رقمًا، وتمثل \w محرفًا من محارف الكلمات، وتمثل \s مسافة بيضاء. وفي سلاسل Go، اكتب شرطة مائلة عكسية مهروبة.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("\\d+")
fmt.Println(re.MatchString("abc 99"))
}محددات التكرار
تحدد محددات التكرار عدد مرات التكرار:
*صفر أو أكثر،+واحد أو أكثر،?صفر أو واحد،{2,4}نطاقًا.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("a{2,3}")
fmt.Println(re.MatchString("aaa"))
fmt.Println(re.MatchString("a"))
}المراسي
تثبت المراسي موضع المطابقة: يعني ^ بداية النص، ويعني $ نهايته. استخدمهما معًا لفرض مطابقة السلسلة النصية بأكملها.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^go$")
fmt.Println(re.MatchString("go"))
fmt.Println(re.MatchString("going"))
}التناوب والمجموعات
تعني الشرطة العمودية | «أو»، وتجمع الأقواس الأجزاء معًا. يطابق (cat|dog)s? الكلمات cat أو cats أو dog أو dogs.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("(cat|dog)s?")
fmt.Println(re.MatchString("dogs"))
}التحقق من تنسيق
تتيح الأنماط المثبتة إنشاء أدوات للتحقق. نتحقق هنا من رمز بسيط على نمط ZIP يتكون من خمسة أرقام فقط.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^\\d{5}$")
fmt.Println(re.MatchString("12345"))
fmt.Println(re.MatchString("123"))
}المطابقة على مستوى البايتات
تتوفر الطرائق بصيغ تعمل على السلاسل النصية وأخرى تعمل على شرائح البايتات. تعمل Match على قيمة []byte، على غرار MatchString.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("[0-9]+")
fmt.Println(re.Match([]byte("id7")))
}تحقق سريع
ما الدالة التي تتسبب في panic عند وجود نمط غير صالح، وتناسب الأنماط الثابتة؟
مراجعة: أساسيات regexp
لقد تعلمت الأساسيات:
- طابق بسرعة باستخدام
MatchString، واجمع الأنماط باستخدامCompileأوMustCompile. - أنشئ الأنماط من الفئات ومحددات التكرار والمراسي والمجموعات.
- استخدم
^و$لتثبيت المطابقة والتحقق من السلسلة النصية بأكملها.
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile("^[a-z]+@[a-z]+$")
fmt.Println(re.MatchString("hi@host"))
}الأسئلة الشائعة
هل درس «أساسيات regexp» مجاني؟
نعم — نص درس «أساسيات regexp» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات regexp»؟
جمّع الأنماط وطابقها تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «أساسيات regexp»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أساسيات regexp
- العثور والاستخراج
- استبدال النصوص
- نصائح الأداء