العثور على ما يقابل وغيرها من الميزات المتقدمة

في بعض الأحيان ، كل ما عليك هو معرفة ما إذا كان هو إدخال النص المتطابقة نمطا. أكثر شيوعا ، وتريد مواصلة عملية البيانات المحددة التي تم المتطابقة. على سبيل المثال ، كنت آمل أن البيانات من النموذج الخاص بك على شبكة الإنترنت تحتوي على رقم بطاقة ائتمان سارية -- سلسلة من 13 إلى 16 أرقام. كنت لا تريد ببساطة للتحقق من وقوع هذا النمط ؛ ما كنت تريد القيام به هو لاستخراج تسلسل الرقم الذي كان يقابل ، حتى أنك يمكن أن تنطبق يتحقق مزيد من التحقق. التعابير العادية تسمح لك لتحديد مجموعة من العناصر نمط ؛ ل النمط العام يمكن ، على سبيل المثال ، لدينا بعض النص الحرفي ، مع مجموعة من سلسلة متغيرة الطول من الأحرف من بعض الطبقة ، أكثر حرفية النص ، ومجموعة أخرى مع شخصيات مختلفة ، وهكذا دواليك. إذا كان هذا النمط غير المتطابقة ، التعبير العادي وظائف مطابقة سيتم تخزين تفاصيل المباراة عموما وأجزاء تتناسب مع كل فئة من فئات محددة. ويتم تخزين هذه البيانات في المتغيرات العالمية المحددة في جوهر بيرل. مجموعات من عناصر النمط الذي يطابق في السلسلة هي المطلوبة ، ويتم وضعها بين قوسين. لذلك ، وجود نمط لاستخراج فرعي 13-16 سلسلة مكونة من بعض سلسلة أطول يمكن أن يكون / \ دال (\ 13،16 د ()) \ د / ؛ إذا سلسلة مباريات هذا النمط ، فإن المتغير $ 1 الاستمرار على أرقام السلسلة. يوضح المثال التالي استخراج حقلين من سطر الإدخال. سطر الإدخال من المفترض أن تكون الرسالة التي تحتوي على كمية الدولار. المبلغ بالدولار ومن المتوقع أن تتكون من الدولار ، وبعض عدد من الأرقام ، وهي النقطة العشرية واختياري اختياري جزء المبلغ. نمط استخدامها لهذه المباراة هي :

/ \ $ ([0-9] +) \.؟ ([0-9] *) \ د /

والعناصر هي :

\ $ ألف حرفي علامة الدولار ([0-9] +) وغير فارغ تسلسل الأرقام تشكيل المجموعة الأولى \.؟ نقطة اختياري العشرية ([0-9] *) وتسلسل الأرقام اختياري تشكيل المجموعة الثانية \ مد أي 'غير أرقام' حرف

النص الذي يطابق أول قوسين الفرعي الذي عقد في بيرل المتغير الأساسي 1 دولار ؛ النص مطابقة المجموعة الثانية من الأرقام سوف يذهب في 2 دولار. منذ التعبير الثاني فرعي يحدد 'صفر أو أكثر الأرقام' ، فمن الممكن ل2 دولار لعقد سلسلة فارغة بعد مباراة ناجحة. المتغيرات $ 1 ، 2 دولار وما هي للقراءة فقط ؛ قيم البيانات يجب أن يتم نسخها من قبل هذه المتغيرات لا يمكن تغييرها.

في حين (1) (طباعة "أدخل سلسلة :" ؛ $ شارع =  وإذا دولار (شارع = ~ / الاقلاع / ط) (آخر ؛) إذا دولار (شارع = ~ / \ $ ([0-9] +) \.؟ ([0-9] *) \ د /) (اذا (2 دولار) ($ سنت = 2 دولار ؛) والا ($ سنتا = 0 ؛) الطباعة "1 دولار أمريكي وسنتا سنتا $ \ ن" ؛) والا (طباعة "لم تطابق الدولار مستخرج \ ن" ؛))

أمثلة من الاختبار المدخلات والمخرجات هي :

دخول السلسلة : هذا اختبار للدولار في البرنامج. لم تطابق الدولار مستخرج أدخل السلسلة : هذا البرنامج تكلفة $ 0. 0 دولار وسنت 0 أدخل السلسلة : هذا البرنامج ينبغي أن التكلفة 34.99 دولار امريكى و 34 سنتا 99 أدخل السلسلة : إعتزل
  

في كثير من الأحيان ، تحتاج إلى وجود نمط مثل :

بعض النصوص الثابتة ؛

سلسلة قيمتها التعسفي ، ولكن هناك حاجة للتجهيز ؛

بعض النص أكثر ثابت.

يمكنك استخدام.* لتطابق سلسلة التعسفي ؛ حتى لو كنت تسعى لاستخراج الفرعي السلسلة بين الكلمات 'ثابت' و 'نص' ، هل يمكن استخدام نمط / الثابتة (*) النص / :

في حين (1) (طباعة "أدخل سلسلة :" ؛ $ شارع =  وإذا دولار (شارع = ~ / الاقلاع / ط) (آخر ؛) إذا دولار (شارع = ~ / الثابتة (*) النص /) (طباعة "متطابق مع فرعية $ 1 \ ن" ؛) والا (طباعة "ألم المباراة \ ن "؛))

مثال المدخلات والمخرجات :

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

مطابق للسلاسل التعسفي يمكن لهم المتاعب أحيانا. خوارزمية المطابقة هو 'الجشع' -- فإنه يحاول العثور على السلسلة الأطول التي مباريات. هناك ضوابط أكثر دقة ؛ يمكنك استخدام أنماط مثل.*؟ التي تطابق الحد الأدنى من سلسلة (حتى في الثاني من الأمثلة المذكورة أعلاه ، سوف تحصل على المباراة 'حتى هذا'). أحيانا ، هناك حاجة لأنماط أكثر تعقيدا مثل :

fixed_text (somepattern) other_stuffSAMEPATTERNrest_of_line

هذه الأنماط يمكن تعريفه من خلال استخدام 'إشارات العودة' في سلسلة النمط. إشارات العودة ترتبط المتطابقة الفرعي strings.When في نمط المنظر هو التحقق من النمط ، فإنه يبحث عن تطابق الممكنة لالفرعي الأول من سلسلة (في العنصر '(somepattern)' في سبيل المثال) ، ويحفظ هذا النص في بيرل المتغير الأساسي 1 دولار. إشارة إلى الوراء ، في شكل \ 1 ، التي تحدث في وقت لاحق في نمط المباراة سيتم استبدال حيوي من قبل هذه المباراة أنقذ جزئية. والمنظر نمط ثم يمكن التأكيد على أن النمط نفسه يتكرر. إشارات العودة موضحة في شظايا البرمجية التالية. هذه الشظايا قد تشكل جزءا من سيناريو بيرل الذي كان من المقرر إجراء الترجمة التقريبية للباسكال رمز إلى رمز. مثل هذا التحول لا يمكن أن تكون مؤتمتة بالكامل (لغات لديهم بعض الاختلافات الجوهرية ، مثل باسكال وقدرته على عش الإعلانات الداخلي) ، ومع ذلك ، يمكن أن أجزاء كبيرة من هذه المهمة أن تكون الترجمة الآلية. وأبسط عمليات التحول التي كنت تريد هي :

العد : الكونت + 1 = ؛ => الكونت + + ؛ الاحصاء : = الكونت * مول ؛ => الكونت *= مول ؛ المجموع : المجموع = 17 + ؛ => المجموع + = 17 ؛

لهذه ، فإنك تحتاج إلى نمط ما يلي :

يطابق اسم (Lvalue) ، وهذا ما يجب أن يقابل الفرعي سلسلة 1 دولار.

مباريات باسكال : = عامل التعيين.

يطابق اسم آخر مطابق للأول شيء المتطابقة ، لذا عليك العودة المرجعية \ 1 في نمط.

مباريات باسكال + ، -- ، * ، / المشغل ، وهذا ما يجب أن يقابل الفرعي السلسلة 2 دولار.

اما عدد المباريات أو اسم آخر ؛ مباراة شبه السلسلة 3 دولار.

مباريات باسكال لإنهاء '؛'.

يسمح بيضاء اضافية في أي مكان.

إذا كان سطر الإدخال يطابق النمط ، لا يمكن لبرنامج انتاج خط منقحة يستخدم جيم لتعديل مشغلي الاحالة (+ + + = الخ) ؛ المدخلات التي لا تطابق قد يكون الانتاج دون تغيير. وهناك القليل اختبار الإطار الذي يوضح التحولات فقط ل'+' و '--' المشغلين هو :

في حين (1) (طباعة "أدخل سلسلة :" ؛ $ شارع =  وإذا دولار (شارع = ~ / الاقلاع / ط) (آخر ؛) إذا دولار (شارع ومعقدة إلى حد ما تذكر للنمط!) (# استبدال س : = س +1 من قبل س + + ، وبالمثل س -- اذا كان ((3 دولار == 1 ) & & (2 مكافئ $ "+"))(طباعة" \ ر 1 دولار + + ؛ \ ن "؛) elsif ((3 دولار == 1) & & (2 مكافئ $"-")) (طباعة "\ ر 1 دولار -- ؛ \ ن "؛) # استبدال س : = س + ص = س + من قبل ذ ، مماثل ل-- آخر (طباعة" \ ر 1 دولار $ 2 = $ 3 ؛ \ ن "؛)) والا (طباعة" $ شارع \ ن "؛))

النمط المطلوب هنا هو :

/ \ ق * ([ألف زا زي] \ ث *) * : * = \ 1 * (\ + | \ * | \ / | -- (*) ([0-9]+)|([ ألف زا زي] \ ث *) (* ؛ /)

أجزاء هي :

 ق * تتطابق مع أي عدد من كبار الفضاء أو أحرف الجدولة.

([ألف زا زي] \ ث *) مباراة السلسلة التي تبدأ بحرف ، ثم لديها عدد من خطابات التعسفي ، والأرقام والأحرف تسطير (ينبغي التقاط معرفات باسكال لصالح المتغير). هذا هو المتطابقة فرعية 1 دولار ؛ قيمته سيتم الرجوع إليها في وقت لاحق عبر نمط الإشارة مرة أخرى \ 1. ويمكن أن تكون القيمة المستخدمة في تجهيز رمز.

'*' في الفضاء مع المحدد للكمية * (صفر أو أكثر) ، وهذا يطابق أي المسافات التي تظهر بعد اسم متغير وقبل باسكال عامل التعيين : =.

: = السلسلة الحرفية التي تتوافق مع باسكال عامل التعيين.

'*' مرة أخرى ، وجعل الحكم للمسافات إضافية.

\ 1 الظهر مرجعية النمط. هناك حاجة لإثبات أنها تعمل على أشكال مثل المبلغ : = مجموع + فال ؛.

'*' الحكم المعتاد لمسافات إضافية.

(\ + | \ * \ \ / | --) مباراة المشغل باسكال ثنائي. (أحرف مثل '+' يجب أن تكون 'فر' لان تفسيرهم العادي كما هو السيطرة على العناصر في تعريف النمط.)

'*' المساحات الممكنة.

(([0-9]+)|([ ألف زا زي] \ ث *)) فرعي المتطابقة السلسلة التي هي إما سلسلة من الأرقام -- [0-9] + -- باسكال أو اسم متغير.

'*' كالعادة ، على مسافات.

؛ باسكال بيان فاصل التعابير العادية للمطابقة معقدة نمط يمكن أن تصبح كبيرة جدا. لقد سمعت ، عبر البريد الإلكتروني ، شائعات عن 4000 حرف التعبير الذي يجسد عناصر هامة من عنوان البريد الإلكتروني ، مما يجعل بدل بالنسبة لغالبية الاختلافات في أشكال عناوين البريد الإلكتروني!

البرامج التي لا تضع يحول النص ، مثل إصدار أكثر طموحا لعبة 'باسكال لجيم' المحول ، وعادة ما تحتاج إلى تطبيق العديد من التحولات المختلفة على نفس الخط من المدخلات. على سبيل المثال ، إذا كان باسكال... ثم يحتاج الى اعادة صياغة في جيم وإذا (...)...النمط. إذا كان الجزء المشروط من هذا البيان ينطوي على باسكال ليست المشغل ، لا بد من إعادة كتابة باستخدام جيم 's! المشغل. برامج التحول هذه لا مجرد قراءة الخط ، وتطبيق تحويل خط الانتاج وتحويلها. بدلا من ذلك ، أنها تطبق على التوالي إلى السلسلة في الموقع. بعد كل تحول ، السلسلة تحديث محددا مقابل أنماط أخرى ممكنة وبدلائهم. بيرل لديه استبدال المشغل الذي ينفذ هذه التحويلات في الموقع من السلاسل. وثمة نمط استبدال يتكون من التعبير العادية التي تحدد الخصائص الموجودة في السلسلة المصدر والنص البديل. أنماط وبدائل يمكن أن تتضمن المتطابقة شبه الجمل ، ولذا ، فمن المحتمل لاستخراج قطعة من متغير النص المضمن في بعض سياق الثابتة وتحديد الاستبدال التي نص متغير مضمن في سياق تغيير طفيف. وهمي 'باسكال لجيم محول 'مثالا آخر. واحد سيكون في حاجة الى تغيير باسكال ليست المشغل إلى جيم ل! المشغل. القضايا المشتركة ، والتي سيكون من السهل أن تترجم ، هي :

Lvalue : = لا التعبير ؛ => lvalue! = التعبير ، وإذا (لم يتم التعبير) ثم => إذا (! التعبير) ثم

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

ق /(:=| \ () لا * + / \ 1! / ؛

تعرف على نمط :

وهناك مجموعة فرعية إما أن يحتوي على التسلسل الحرفي : = أو القوس الأيسر (كما نجا \ ().

مسافات الاختياري.

الحرفي لا.

واحد أو أكثر على مسافات.

استبدال النص هو ما يقابل الفريق الفرعي (إما : = قوسين أو اليسار) ، على مسافة وجيم ل! سيكون المشغل. استبدال هذا النمط يمكن استخدامها في التعليمات البرمجية كما يلي :

بينما دولار (شارع =  ) (اقضم بصوت عالي دولار (شارع) ؛ # تطبيق تسلسل يتحول إلى شارع... $ # المقبل ، والتعامل مع باسكال ليست المشغل $ شارع = ~ ق /(:=| \ () لا * + / \ 1! / ؛. .. الطباعة $ شارع "\ ن" ؛)

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

مقال مقدم من اندرو بيترسون


تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات.
المهم : هذه المادة "العثور على ما يقابل وغيرها من الميزات المتقدمة" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.


Online: 392 users browsing the articles directory