مرجع سريع لبناء جملة التعبيرات العادية

تلخص هذه القائمة المرجعية الأجزاء الأكثر استخدامًا/صعوبة التذكر من محرك التعبيرات العادية المتاح في معظم أجزاء calibre.

فئات الأحرف

فئات الأحرف مفيدة لتمثيل مجموعات مختلفة من الأحرف، بإيجاز.

أمثلة:

التمثيل

الفئة

[a-z]

أحرف صغيرة. لا تتضمن الأحرف ذات علامات التشكيل والروابط.

[a-z0-9]

أحرف صغيرة من a إلى z أو أرقام من 0 إلى 9

[A-Za-z-]

أحرف كبيرة أو صغيرة، أو شرطة. لتضمين الشرطة في فئة، يجب وضعها في البداية أو في النهاية حتى لا تختلط بالواصلة التي تحدد نطاقًا من الأحرف.

[^0-9]

أي حرف باستثناء رقم. العلامة (^) الموضوعة في بداية الفئة تستبعد أحرف الفئة (فئة مكملة).

[[a-z]--[aeiouy]]

الحروف الساكنة الصغيرة. يمكن تضمين فئة داخل فئة. الأحرف -- تستبعد ما يليها.

[\w--[\d_]]

جميع الأحرف (بما في ذلك الأحرف الأجنبية المشددة). يمكن استخدام الفئات المختصرة داخل فئة.

مثال:

<[^<>]+> to select an HTML tag

فئات الأحرف المختصرة

التمثيل

الفئة

\d

رقم (نفس [0-9])

\D

أي حرف غير رقمي (نفس [^0-9])

\w

حرف أبجدي رقمي ([a-zA-Z0-9]) بما في ذلك الأحرف ذات علامات التشكيل والروابط.

\W

أي حرف "غير كلمة"

\s

مسافة، مسافة غير فاصلة، علامة جدولة، سطر جديد

\S

أي حرف "غير مسافة بيضاء"

.

أي حرف باستثناء السطر الجديد. استخدم مربع الاختيار "كل النقاط" أو معدّل التعبير العادي (?s) لتضمين حرف السطر الجديد.

المحددات الكمية

المحدد الكمي

عدد مرات ظهور التعبير الذي يسبق المحدد الكمي

?

0 أو 1 تكرار للتعبير. نفس {0,1}

+

1 أو أكثر من مرات ظهور التعبير. نفس {1,}

*

0، 1 أو أكثر من مرات ظهور التعبير. نفس {0,}

{n}

بالضبط n تكرار للتعبير

{min,max}

عدد مرات الظهور بين القيم الدنيا والقصوى المضمنة

{min,}

عدد مرات الظهور بين القيمة الدنيا المضمنة واللانهاية

{,max}

عدد مرات الظهور بين 0 والقيمة القصوى المضمنة

الجشع

افتراضيًا، مع المحددات الكمية، يكون محرك التعبير العادي جشعًا: فهو يمدد التحديد قدر الإمكان. غالبًا ما يسبب هذا مفاجآت في البداية. تتبع ? محددًا كميًا لجعله كسولًا. تجنب وضع اثنين في نفس التعبير، فقد تكون النتيجة غير متوقعة.

احذر من تداخل المحددات الكمية، على سبيل المثال، النمط (a*)*، لأنه يزيد وقت المعالجة بشكل كبير.

التبديل

الحرف | في التعبير العادي هو OR منطقي. هذا يعني أن التعبير السابق أو التالي يمكن أن يتطابق.

الاستبعاد

الطريقة 1

pattern_to_exclude(*SKIP)(*FAIL)|pattern_to_select

مثال:

"Blabla"(*SKIP)(*FAIL)|Blabla

يختار Blabla، في السلاسل Blabla أو "Blabla أو Blabla"، ولكن ليس في "Blabla".

الطريقة 2

pattern_to_exclude\K|(pattern_to_select)

"Blabla"\K|(Blabla)

يختار Blabla، في السلاسل Blabla أو "Blabla أو Blabla"، ولكن ليس في "Blabla".

المراسي

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

\b

يشير إلى حدود الكلمة، أي انتقال من مسافة إلى حرف غير مسافة. على سبيل المثال، يمكنك استخدام \bsurd لمطابقة the surd ولكن ليس absurd.

^

يطابق بداية السطر (في وضع الأسطر المتعددة، وهو الوضع الافتراضي)

$

يطابق نهاية السطر (في وضع الأسطر المتعددة، وهو الوضع الافتراضي)

\K

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

المجموعات

(expression)

مجموعة التقاط، تخزن التحديد ويمكن استدعاؤها لاحقًا في أنماط البحث أو الاستبدال باستخدام \n، حيث n هو الرقم التسلسلي لمجموعة الالتقاط (تبدأ من 1 بترتيب القراءة).

(?:expression)

مجموعة لا تلتقط التحديد

(?>expression)

مجموعة ذرية: بمجرد استيفاء التعبير، يمر محرك التعبير العادي، وإذا فشل بقية النمط، فلن يتراجع لمحاولة مجموعات أخرى مع التعبير. المجموعات الذرية لا تلتقط.

(?|expression)

مجموعة إعادة تعيين الفرع: فروع التبديلات المضمنة في التعبير تشترك في نفس أرقام المجموعة.

(?<name>expression)

مجموعة مسماة "name". يمكن استدعاء التحديد لاحقًا في نمط البحث بواسطة (?P=name) وفي الاستبدال بواسطة \g<name>. يمكن لمجموعتين مختلفتين استخدام نفس الاسم.

نظرة سريعة

نظرة سريعة

المعنى

?=

بحث أمامي إيجابي (يوضع بعد التحديد)

?!

بحث أمامي سلبي (يوضع بعد التحديد)

?<=

بحث خلفي إيجابي (يوضع قبل التحديد)

?<!

بحث خلفي سلبي (يوضع قبل التحديد)

البحث الأمامي والخلفي لا يستهلكان الأحرف، فهما ذو طول صفري ولا يلتقطان. إنهما مجموعات ذرية: بمجرد استيفاء التأكيد، يمر محرك التعبير العادي، وإذا فشل بقية النمط، فلن يتراجع داخل البحث الأمامي أو الخلفي لمحاولة مجموعات أخرى.

عند البحث عن تطابقات متعددة في سلسلة، عند موضع بداية كل محاولة مطابقة، يمكن للبحث الخلفي فحص الأحرف قبل الموضع الحالي. لذلك، على السلسلة 123، يجب أن يختار النمط (?<=\d)\d (رقم مسبوق برقم)، نظريًا، 2 و 3. من ناحية أخرى، يمكن لـ \d\K\d اختيار 2 فقط، لأن موضع البداية بعد التحديد الأول هو مباشرة قبل 3، ولا توجد أرقام كافية لمطابقة ثانية. وبالمثل، فإن \d(\d) يلتقط 2 فقط. في ممارسة محرك التعبير العادي في calibre، يتصرف البحث الخلفي الإيجابي بنفس الطريقة، ويختار 2 فقط، على عكس النظرية.

يمكن وضع المجموعات داخل عمليات البحث، ولكن الالتقاط نادرًا ما يكون مفيدًا. ومع ذلك، إذا كان مفيدًا، فسيكون من الضروري توخي الحذر الشديد في استخدام محدد كمي في البحث الخلفي: الجشع المرتبط بـ غياب التراجع يمكن أن يعطي التقاطًا مفاجئًا. لهذا السبب، استخدم \K بدلاً من البحث الخلفي الإيجابي عندما يكون لديك محدد كمي (أو أسوأ من ذلك، عدة) في مجموعة التقاط للبحث الخلفي الإيجابي.

مثال على البحث الأمامي السلبي:

(?![^<>{}]*[>}])

يوضع في نهاية النمط لمنع التحديد داخل علامة أو نمط مضمن في الملف.

كلما أمكن، من الأفضل دائمًا "تثبيت" البحث، لتقليل عدد الخطوات اللازمة للحصول على النتيجة.

الاستدعاء الذاتي

التمثيل

المعنى

(?R)

الاستدعاء الذاتي للنمط بأكمله

(?1)

الاستدعاء الذاتي للنمط الوحيد لمجموعة الالتقاط المرقمة، هنا المجموعة 1

الاستدعاء الذاتي هو استدعاء الذات. هذا مفيد للاستعلامات المتوازنة، مثل السلاسل المقتبسة، والتي يمكن أن تحتوي على سلاسل مقتبسة مضمنة. وبالتالي، إذا واجهنا أثناء معالجة سلسلة بين علامتي اقتباس مزدوجتين، بداية سلسلة جديدة بين علامتي اقتباس مزدوجتين، فنحن نعرف كيف نفعل ذلك، ونستدعي أنفسنا. ثم يكون لدينا نمط مثل:

start-pattern(?>atomic sub-pattern|(?R))*end-pattern

لتحديد سلسلة بين علامتي اقتباس مزدوجتين دون التوقف عند سلسلة مضمنة:

“((?>[^“”]+|(?R))*[^“”]+)”

يمكن استخدام هذا القالب أيضًا لتعديل أزواج من العلامات التي يمكن تضمينها، مثل علامات <div>.

أحرف خاصة

التمثيل

الحرف

\t

جدولة

\n

فاصل سطر

\x20

مسافة (قابلة للكسر)

\xa0

مسافة غير قابلة للكسر

أحرف ميتا

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

^ . [ ] $ ( ) * + ? | \

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

{ } ! < > = :

تفقد الأحرف الخاصة حالتها إذا تم استخدامها داخل فئة (بين الأقواس []). القوس الإغلاقي والشرطة لهما حالة خاصة في الفئة. خارج الفئة، الشرطة هي حرف عادي بسيط، القوس الإغلاقي يظل حرفًا وصفيًا.

الشرطة المائلة (/) وعلامة الرقم (أو حرف الهاش) (#) ليست أحرفًا وصفية، لا تحتاج إلى أن يتم الهروب منها.

في بعض الأدوات، مثل regex101.com مع محرك Python، تتمتع علامات الاقتباس المزدوجة بحالة خاصة كفاصل، ويجب الهروب منها، أو تغيير الخيارات. هذا ليس هو الحال في محرر calibre.

الأوضاع

(?s)

يجعل النقطة (.) تطابق أحرف السطر الجديد أيضًا

(?m)

يجعل علامتي ^ و $ تطابقان بداية ونهاية الأسطر بدلاً من بداية ونهاية السلسلة بأكملها.