التقاط مجموعات مقتبسة متعددة في 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