التعبيرات النمطية في Go مع أمثلة: دليل كامل للمبتدئين

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعبيرات النمطية في Go (Golang): دليل كامل للمبتدئين

\n\n

التعبيرات النمطية (regex) هي أداة قوية للبحث عن النص واستخراجه واستبداله وفق أنماط محددة. في لغة Go (Golang)، يتم تنفيذ العمل مع التعبيرات النمطية من خلال الحزمة القياسية regexp. في هذه المقالة، سنشرح أساسيات العمل مع regexp في Go، ونستعرض الوظائف الرئيسية ونقدم أمثلة عملية ستساعدك على البدء في استخدام التعبيرات النمطية في مشاريعك.

\n\n

ما هي التعبيرات النمطية ولماذا نحتاجها في Go؟

\n\n

التعبير النمطي هو سلسلة من الأحرف تحدد نمطًا للبحث في النص. على سبيل المثال، يمكنك التحقق مما إذا كانت السلسلة تحتوي على بريد إلكتروني أو رقم هاتف أو تنسيق بيانات معين. في Go، توفر حزمة regexp وظائف لتجميع الأنماط والبحث عن التطابقات واستبدال النص واستخراج السلاسل الفرعية.

\n\n

الإمكانيات الرئيسية لـ regexp:

\n
    \n
  • البحث — التحقق من وجود سلسلة فرعية تطابق النمط.
  • \n
  • الاستخراج — الحصول على جميع التطابقات أو المجموعات الفردية.
  • \n
  • الاستبدال — استبدال الأجزاء التي تم العثور عليها بنص آخر.
  • \n
  • التحقق من الصحة — التحقق من تنسيق السلسلة (البريد الإلكتروني، كلمة المرور، URL).
  • \n
\n\n

تثبيت واستيراد حزمة regexp

\n\n

حزمة regexp مضمنة في المكتبة القياسية لـ Go، لذلك لا تحتاج إلى تثبيت أي شيء. لاستخدامها، يكفي استيرادها في بداية الملف:

\n\n
import (\n    "fmt"\n    "regexp"\n)
\n\n

1. تجميع التعبير النمطي: Compile و MustCompile

\n\n

الخطوة الأولى في العمل مع التعبيرات النمطية هي تجميع النمط. في Go، هناك طريقتان رئيسيتان:

\n\n
    \n
  • regexp.Compile(expr) — تُرجع تعبيرًا مُجمَّعًا ورسالة خطأ إذا كان النمط غير صحيح.
  • \n
  • regexp.MustCompile(expr) — مشابهة، ولكنها تُحدث ذعرًا (panic) عند حدوث خطأ. مناسبة للأنماط الثابتة.
  • \n
\n\n

مثال:

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    // نستخدم MustCompile لأن النمط صحيح مسبقًا\n    re := regexp.MustCompile(`[a-z]+`)\n    \n    // Compile مع معالجة الخطأ\n    re2, err := regexp.Compile(`[0-9]+`)\n    if err != nil {\n        fmt.Println("خطأ في التجميع:", err)\n        return\n    }\n    fmt.Println(re, re2)\n}
\n\n

2. الطرق الأساسية للبحث والتحقق

\n\n

بعد التجميع، لدينا كائن *regexp.Regexp مع مجموعة من الطرق. دعنا نستعرض أكثرها فائدة.

\n\n

MatchString — التحقق من التطابق

\n

الطريقة MatchString(s string) bool تُرجع true إذا كانت السلسلة تحتوي على تطابق واحد على الأقل مع النمط.

\n\n
re := regexp.MustCompile(`go`)\nfmt.Println(re.MatchString("golang"))   // true\nfmt.Println(re.MatchString("python"))   // false
\n\n

FindString — البحث عن أول تطابق

\n

تُرجع أول سلسلة فرعية تطابق النمط.

\n\n
re := regexp.MustCompile(`[0-9]+`)\nfmt.Println(re.FindString("السعر: 100 روبل، خصم 20%")) // "100"
\n\n

FindAllString — البحث عن جميع التطابقات

\n

تُرجع شريحة من جميع السلاسل التي تم العثور عليها. الوسيط الثاني هو الحد الأقصى لعدد التطابقات (-1 يعني الكل).

\n\n
re := regexp.MustCompile(`[0-9]+`)\nresult := re.FindAllString("السعر: 100 روبل، خصم 20%", -1)\nfmt.Println(result) // ["100", "20"]
\n\n

3. استخراج المجموعات باستخدام التعبيرات الفرعية

\n\n

الأقواس المستديرة في النمط تُنشئ مجموعات التقاط (capturing groups). الطريقة FindStringSubmatch تُرجع شريحة حيث العنصر الأول هو التطابق الكامل، والعناصر التالية هي قيم المجموعات.

\n\n
re := regexp.MustCompile(`(\\d{4})-(\\d{2})-(\\d{2})`)\ndate := "التاريخ: 2023-12-25"\nmatches := re.FindStringSu                

المدونات

توصيات الكتب