"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية التقاط مجموعات متكررة متعددة في التعبيرات العادية في Go؟

كيفية التقاط مجموعات متكررة متعددة في التعبيرات العادية في Go؟

تم النشر بتاريخ 2024-11-02
تصفح:695

How to Capture Multiple Repeating Groups in Regular Expressions in Go?

التقاط مجموعات متكررة في Go

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

ضع في اعتبارك المشكلة التالية: تحليل السلاسل المكونة من كلمة كبيرة متبوعة بصفر أو أكثر من الوسائط المحاطة بعلامات اقتباس مزدوجة. الهدف هو استخراج كل من الأمر (كلمة كبيرة) والوسائط (السلاسل المقتبسة).

Regex Pitfalls

هناك خطأ شائع هو استخدام تعبير عادي مثل:

re1, _ := regexp.Compile(`([A-Z] )(?: "([^"] )")*`)

يلتقط هذا التعبير العادي الوسيطة الأخيرة فقط في السلسلة. قم بتعديل التعبير للسماح بالتقاط مجموعات متعددة من الوسائط:

re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)

التقاط الأوامر والوسائط

الآن، لاستخراج كل من الأمر والوسائط، استخدم وظيفة FindAllStringSubmatch مع تعبير عادي معدل بشكل مناسب:

results := re1.FindAllStringSubmatch(`COPY "filename one" "filename two"`, -1)

مجموعات التقاط التعبير العادي هذه هي:

  • المجموعة 1: الأمر (كلمة كبيرة)
  • المجموعة 2: كل وسيطة (سلسلة ذات علامات اقتباس مزدوجة)

التكرار على النتائج

أخيرًا، للتكرار فوق النتائج وافصل الأمر عن الوسيطات:

fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}

من خلال معالجة أوجه القصور في التعبير العادي، يمكنك التقاط المجموعات المتكررة بشكل فعال في كود Go الخاص بك.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3