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

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

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

How to Match Repeating Characters in Go Without Backreferences?

كيفية مطابقة أي حرف متكرر باستخدام التعبيرات العادية في Go؟

في هذه المقالة، سنواجه التحدي المتمثل في مطابقة أي حرف يتكرر مرتين باستخدام التعبيرات العادية في Go. غالبًا ما تكون هذه المهمة واضحة في صيغ التعبير العادي الأخرى، مثل JavaScript، حيث يمكن للمرء ببساطة استخدام المرجع الخلفي لمطابقة الأحرف المتكررة. ومع ذلك، فإن محرك التعبير العادي الأصلي لـ Go (re2) لا يدعم المرجع الخلفي.

لا يمكن استخدام المرجع الخلفي في re2 الخاص بـ Go

يعمل مثال JavaScript المقدم على تعزيز المرجع الخلفي لالتقاطه أحرف مكررة:

var str = "abccdeff";
var r = /([a-z]{1})\1/g
console.log(str.match(r))

قد يفشل هذا النمط في Go's re2 بسبب نقص دعم المرجع الخلفي.

بدائل Go's re2

لمعالجة هذا القيد، فكر في هذه البدائل:

  • استخدم مكتبة regex متوافقة: تقدم المكتبات مثل glenn-brown/golang-pkg-pcre ميزات متقدمة، بما في ذلك مرجع خلفي، ومتوافق مع بناء جملة Go.
  • تنفيذ حلقة مخصصة: تطوير حل قائم على الحلقة يقوم بتحليل الأحرف يدويًا للتكرار دون الاعتماد على التعبير العادي.

مثال لحل حلقة مخصصة

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "abccdeff"

    // Find and print repeating characters without using regex
    for i, ch := range str {
        if i 1 
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3