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

كيفية التقاط مجموعات متعددة مقتبسة في Go: حل Regex

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

How to Capture Multiple Quoted Groups in Go: A Regex Solution

التقاط مجموعات مقتبسة متعددة في Go

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

للتعامل مع هذه المهمة، يتم استخدام تعبير عادي: re1, _ := regexp.Compile(([A-Z] )(?: " (

1 )")*). تتطابق مجموعة الالتقاط الأولى ([A-Z] ) مع الأمر الكبير، بينما تتطابق مجموعة الالتقاط الثانية (?: "([^"] )")* مع صفر أو أكثر من الوسائط المقتبسة.

ومع ذلك، فإن الكود المقدم يلتقط الوسيطة الأخيرة فقط لحل هذه المشكلة، يُقترح تعبير عادي أكثر استرخاءً: re1, _ := regexp.Compile(([A-Z] )|(?: "(

1 )") يستخدم هذا التعبير العادي اتحادًا | للسماح بأمر أو وسيطة.

عن طريق تعديل الكود إلى:

re1, _ := regexp.Compile(`([A-Z] )|(?: "([^"] )")`)
results := re1.FindAllStringSubmatch(`COMMAND "arg1" "arg2" "arg3"`, -1)

fmt.Println("Command:", results[0][1])
for _, arg := range results[1:] {
    fmt.Println("Arg:", arg[2])
}
يمكن الآن التقاط جميع الوسائط بنجاح. يعد هذا التعبير العادي المنقح أكثر تنوعًا، ويستوعب الاختلافات في تنسيق الإدخال حيث قد تحدث الأوامر والوسائط بترتيبات مختلفة. ]

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

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

Copyright© 2022 湘ICP备2022001581号-3