اختبار التعبيرات النمطية
اختبار التعبيرات النمطية
يدعم اختبار التعبيرات النمطية عبر الإنترنت المطابقة الفورية، ومجموعات الالتقاط، والمجموعات المسماة، ومعاينة الاستبدال، وهو مناسب للتحقق من الأنماط، واستخراج النصوص، والاستبدال الدفعي.
/
/g
بحث شامل
تجاهل حالة الأحرف
متعدد الأسطر
النقطة تشمل سطر جديد
وضع يونيكود
مطابقة من الموضع الحالي
نص الاختبار
نص الاستبدال
نتائج المطابقة
أدخل نمطًا لبدء المطابقة
معاينة الاستبدال
بداية سريعة
سيناريوهات شائعة
استخرج المعرّفات، والبريد الإلكتروني، والتواريخ، أو العلامات المخصصة من السجلات أو مصدر الصفحة أو النص الخام.
تحقّق أولًا من دقة المطابقة قبل نقل القاعدة إلى الشيفرة أو التحقق من النماذج أو قواعد البحث.
استخدم مجموعات الالتقاط والمجموعات المسماة لاستبدال بنية النص أو محتوى الحقول دفعة واحدة.
نصائح الاستخدام
القيود والتوافقية
الخصوصية والأمان
أسئلة شائعة
التعبير العادي (regex) هو لغة نمطية لوصف بنيات النص. فكر في الأمر على أنه "بحث متقدم" — بدلاً من البحث عن كلمة ثابتة، فإنك تبحث عن كل شيء يطابق قاعدة.\n\nعلى سبيل المثال، \\d{4}-\\d{2}-\\d{2} يطابق جميع التواريخ بتنسيق YYYY-MM-DD، و [\\w.]+@[\\w.]+ يطابق عناوين البريد الإلكتروني. يُستخدم Regex على نطاق واسع في: البحث عن النص واستخراجه (العثور على رموز الخطأ في السجلات)، والتحقق من صحة التنسيق (التحقق من أرقام الهواتف)، واستبدال الدُفعات (تحويل تنسيقات التاريخ).\n\n تقريبًا كل لغة برمجة (JavaScript، وPython، وJava، وGo، وما إلى ذلك) والعديد من الأدوات (VS Code، وgrep، وsed) تدعم regex بتركيب جملة مماثل في الغالب. تستخدم هذه الأداة محرك JavaScript RegExp للاختبار والتعلم السريع عبر الإنترنت.
يقوم JavaScript regex بإرجاع المطابقة الأولى فقط بشكل افتراضي - وهذا هو سلوك مواصفات اللغة، وليس قيودًا على الأداة. انقر فوق الزر g في شريط العلامات لتمكين البحث الشامل ورؤية جميع التطابقات.\n\nلاحظ التفاعل بين g وy: يقوم g بمسح النص بأكمله من البداية إلى النهاية، بينما y (مثبت) يتطلب أن يبدأ كل تطابق من حيث انتهت المباراة السابقة تمامًا - إذا كانت هناك أحرف فجوات بين التطابقات، فإن y يتوقف عند الفجوة الأولى. عادةً ما يكفي تمكين g بدون y.
هناك أربعة أسباب شائعة: \n\n1. الأقواس غير المتطابقة: كل (يجب أن يكون له مطابقة)، كل [يجب أن يكون له مطابقة]. قد تقوم IDEs بإكمال هذه العناصر تلقائيًا، لكن هذه الأداة تتطلب الاقتران اليدوي.\n2. محددات الكمية في غير محلها: محددات الكمية (*، +، ?، {n}) يجب أن تتبع عنصرًا قابلاً للقياس الكمي. مجموعات مثل *+ أو ?* غير قانونية، إلا إذا كان المحدد الكمي الأول هو ? للتعديل البطيء (مثل *؟).\n3. عمليات الهروب غير المكتملة: \\ الوحيد في النهاية غير قانوني - يجب أن يفلت من حرف معين (مثل \\d، \\n، \\\\).\n4. تحتاج خصائص Unicode إلى علامة u: \\p{L}، \\p{Script=Han} وخاصية Unicode المشابهة تفلت من أخطاء الرمي دون تمكين علامة u. انقر فوق الزر u لتمكينه.
هذه هي الرموز المرجعية البديلة المحددة بواسطة String.prototype.replace() في JavaScript:\n\n- $1, $2, ..., $99: مرجع إلى المحتوى الذي تم التقاطه بواسطة مجموعة الالتقاط n (...)\n- $&: النص المطابق بالكامل\n- $`: النص قبل match\n- $': النص بعد المطابقة\n- ${name}: المحتوى الذي تم التقاطه بواسطة المجموعة المسماة (?<name>...)\n\nعلى سبيل المثال، النمط (\\w+)\\s(\\w+) يطابق "hello World" مع الاستبدال $2-$1 ينتج "مرحبا بالعالم". لتضمين $ حرفيًا في الاستبدال، استخدم $$ للهروب منه.
غالبًا ما تكون المهلات ناجمة عن "التراجع الكارثي". عندما يواجه محرك التعبير العادي محددات كمية متداخلة (مثل (a+)+b) أو مسارات اختيارية متداخلة، فإنه يتراجع من خلال عدد هائل من المجموعات، مما يتسبب في زيادة وقت المطابقة.\n\nالأنماط الخطيرة النموذجية: (a+)+, (.*?)*, (.+)+$ وما إلى ذلك. الحلول:\n1. يستبدل . مع فئات شخصية دقيقة، على سبيل المثال. [^\\s]+ بدلاً من .+\n2. تجنب محددات الكمية المتداخلة - قم بتغيير (a+)+ إلى a+\n3. تقليل المسارات الاختيارية المتداخلة — قم بتغيير (a|ab)+ إلى a+b؟\n\nبعد ضبط النمط، انقر فوق الزر "إعادة المحاولة" في منطقة نتائج المطابقة. تتمتع الأداة بحماية مهلة مدتها 4 ثوانٍ ولن تجمد متصفحك.
تختلف اللغات المختلفة في محرك regex في ثلاثة مجالات رئيسية: \n\n1. يختلف دعم بناء الجملة: لا يدعم JavaScript أنماط PCRE المتكررة (؟R)، أو الفروع الشرطية (؟(cond)yes|no)، أو المجموعات الذرية (؟>...). تفتقر وحدة إعادة Python أيضًا إلى هذه العناصر، لكن وحدة regex الخاصة بها تدعمها. تدعم Java المجموعات الذرية ولكنها لا تدعم التكرار.\n2. يختلف التعامل مع Unicode: يقوم Python 3 بإعادة معالجة \\w، \\d كـ Unicode افتراضيًا؛ يستخدم JavaScript ASCII بشكل افتراضي — يجب عليك تمكين علامة u يدويًا. وهذا يعني أن \\w لن يتطابق مع الأحرف الصينية وأن \\b لا تنطبق حدود الكلمات بين أحرف CJK.\n3. تختلف دلالات السطر الجديد: لغة بايثون . لا يتطابق مع \\n افتراضيًا (مثل JavaScript)، بينما يتصرف Pattern.DOTALL الخاص بـ Java بنفس سلوك علامة JavaScript.\n\nالتوصية: استخدم هذه الأداة للتحقق المنطقي السريع، ثم قم بإجراء التأكيد النهائي باستخدام محرك اللغة المستهدفة.