[Powered by Google Translate] [ندوة: نمط مطابقة مع التعبيرات العادية]
[جون جامعة هارفارد Mussman-]
[هذا CS50.-CS50.TV]
حسنا. حسنا، ترحيب الجميع. هذا هو CS50 2012.
اسمي جون، وسأتحدث اليوم عن التعابير العادية.
التعبيرات العادية هو في المقام الأول أداة، ولكن أيضا تستخدم في بعض الأحيان
في التعليمات البرمجية بنشاط لمطابقة أساسا أنماط والسلاسل.
حتى هنا فكاهي ويب من XKCD.
في هذا هزلية هناك لغز جريمة قتل حيث القاتل لديه
يتبع شخص ما في إجازة، والأنصار أن
البحث من خلال 200 ميغا من رسائل البريد الإلكتروني تبحث عن عنوان.
وهم على وشك التخلي عندما شخص يعرف التعابير العادية -
يفترض خارقة - الانقضاض أسفل ويكتب بعض التعليمات البرمجية
ويحل لغز جريمة قتل.
لذلك يفترض أن يكون شيئا أنك لن تكون مخولة للقيام
بعد هذه الندوة.
نحن مجرد الذهاب الى توفير مقدمة موجزة إلى اللغة
وتعطيك المال الكافي بما يكفي للذهاب بعد مزيد من الموارد لوحدك.
>> التعبيرات العادية حتى ننظر في الأساس من هذا القبيل.
هذا هو التعبير العادي في روبي.
أنها ليست مختلفة بشكل رهيب عبر لغات.
لدينا فقط على خطوط مائلة لبدء وعلامة التعبير العادي في روبي.
وهذا هو التعبير العادي الذي تبحث عنه في نمط عنوان البريد الإلكتروني.
لذلك نرى في بت الأول يبحث عن أي حرف أبجدي رقمي.
وذلك لأن عناوين البريد الإلكتروني في كثير من الأحيان أن تبدأ مع حرف أبجدي.
ثم أي حرف خاص يليه الرمز @.
ثم نفس الشيء بالنسبة لاسم المجال.
ثم بين 2 و 4 أحرف للبحث عن. com،. صافي، وهلم جرا.
لذلك هذا هو مثال آخر من التعبير العادي.
التعبيرات العادية هكذا هي بروتوكولات لإيجاد أنماط في النص.
يفعلون المقارنات، مختارات، والتبديلات.
لذلك المثال الثالث هو العثور على جميع أرقام الهواتف التي تنتهي في 54 في الدليل.
حتى قبل ديفيد مزقت الاحتياطي الدليل CS50 يمكننا بحث عن
نمط حيث لدينا 3 أرقام قوسين ثم ثم إنهاء قوس،
3 أرقام أكثر من ذلك، اندفاعة، 2 أرقام، ثم 54.
وسيكون ذلك أساسا كيف يمكننا الخروج مع تعبير عادي للبحث عن ذلك.
>> لذلك هناك - لقد فعلنا بعض الأشياء في CS50 التي هي قليلا مثل
التعابير العادية، لذلك - على سبيل المثال - في ملف dictionary.C
لمجموعة التدقيق الإملائي مشكلة قد تكون قد استخدمت fscanf
لقراءة في كلمة من القاموس.
ويمكنك أن ترى 45S نسبة تبحث عن سلسلة من 45 حرفا.
لذلك هو نوعا ما مثل التعبير العادي بدائية.
ويمكن أن يكون لديك أي 45 الأحرف التي تناسب مشروع القانون في هناك
واختيار تلك المباراة.
ثم المثال الثاني في المشكلة الأخيرة برمجة الويب
المنصوص عليها في قانون توزيعة لPHP نقوم به في الواقع لديهم تعبير عادي بسيط.
وهذا هو واحد فقط لمجرد النظر الى معرفة ما اذا كان صفحة ويب التي يتم تمريرها في
مباريات إما دخول أو خروج التسجيل PHP.
ثم تعود صحيحة أو خاطئة على أساس أن مطابقة التعبير العادي.
>> لذلك عندما تستخدمون تعبير عادي؟
لماذا أنت هنا اليوم؟
لذلك لم تكن تريد استخدام التعبير العادية عندما يكون هناك شيء ما
لا وظيفة لك بسهولة حتى أكثر من ذلك.
لذا XML و HTML هي في الواقع صعبة جدا
لكتابة التعابير العادية لانه كما سنرى في قليلا.
لذلك هناك موزعي مخصصة لتلك اللغات.
تحتاج أيضا إلى أن تكون بخير مع المفاضلة والدقة في كثير من الأحيان.
إذا كنت تحاول - حتى رأينا تعبير عادي لعنوان بريد إلكتروني،
ولكن تقول انك تريد عنوان بريد إلكتروني محدد وتدريجيا
قد يصبح التعبير العادي أكثر تعقيدا كما أنها أصبحت أكثر دقة.
حتى لا تكون التجارة دفعة واحدة.
لديك للتأكد من أن كنت ترغب بجعل بخير مع التعبير العادي.
إذا كنت تعرف بالضبط ما كنت تبحث عن أنه قد يكون أكثر منطقية
وضعه في الوقت وكتابة محلل أكثر فعالية.
وأخيرا هناك مسألة تاريخية مع انتظام
من التعابير واللغات.
التعبيرات العادية هي أكثر من ذلك بكثير في الواقع أقوى من
يقول التعابير العادية في بالمعنى الرسمي.
>> لذلك أنا لا أريد أن أذهب بعيدا جدا في النظرية الشكلية،
ولكن معظم لغات أننا التعليمات البرمجية في الواقع ليست منتظمة.
وهذا هو السبب في التعبيرات العادية في بعض الأحيان لا تعتبر كل ما آمن.
وذلك أساسا هناك تسلسل هرمي تشومسكي للغات،
والتعابير العادية يتم بناء باستخدام الاتحاد، سلسلة،
وعملية نجمة كليين أننا سوف نرى في بضع دقائق.
إذا كنت مهتما في نظرية هناك الكثير جدا يحدث هناك تحت غطاء محرك السيارة.
>> لذلك تاريخا موجزا - فقط للسياق هنا - جاء مجموعات منتظمة حتى
في 1950s، وبعد ذلك كان لدينا المحررين البسيطة التي
أدرجت التعابير العادية - مجرد البحث عن السلاسل.
البقرى - الذي هو أداة سطر الأوامر - كان واحدا من أول
أدوات شعبية جدا التي أدرجت التعبيرات العادية في 1960s.
في '80s، شيد بيرل - هي لغة البرمجة التي
يتضمن التعابير العادية بشكل بارز جدا.
ثم وفي الآونة الأخيرة كان لدينا بيرل التعبير العادي متوافق
بروتوكولات أساسا في اللغات الأخرى التي تستخدم الكثير من نفس بناء الجملة.
بالطبع كان أهم حدث في عام 2008
حيث كان هناك أول يوم الوطني التعابير العادية،
الذي اعتقد انه 1 يونيو إذا كنت ترغب في أن نحتفل.
>> مرة أخرى، أكثر قليلا فقط نظرية هنا.
لذلك هناك طرق عدة مختلفة من بناء التعابير العادية.
واحد طريقة بسيطة هو بناء التعبير الذي كنت تسير على
تعمل على سلسلة تفسير - بناء الأساس مصغرة برنامج القليل الذي
بتحليل قطعة من سلسلة ونرى، "أوه، هل هذا يصلح التعبير العادي أم لا؟"
ثم قم بتشغيل ذلك.
حتى إذا كان لديك تعبير عادي صغير جدا، وهذا هو على الارجح
أنجع وسيلة للقيام بذلك.
ثم إذا كنت - وثمة خيار آخر هو الحفاظ على إعادة بناء
التعبير كما تذهب، وهذا هو الاحتمال محاكاة.
وكانت هذه المحاولات المبكرة في خوارزميات التعبير العادية
بسيطة نسبيا وسريعة نسبيا، ولكن لم يكن لديهم الكثير من المرونة.
للقيام به حتى بعض من الأشياء التي نحن سوف ننظر في
اليوم كان علينا أن نفعل التعبير العادي أكثر تعقيدا
تطبيقات التي يحتمل أن تكون أبطأ بكثير، لذلك هذا شيء أن نأخذ في الاعتبار
هناك أيضا تعبيرات إنكار العادية متنوعة هجوم
التي تستغل إمكانات هذه التطبيقات الأحدث من
التعابير العادية لتصبح معقدة جدا.
وبنفس الشعور الذي رأيناه في الهجمات تجاوز سعة المخزن المؤقت،
لديك الهجمات التي تعمل من خلال جعل الحلقات العودية التي
تجاوز قدرة الذاكرة.
وبالمناسبة Regexen هي واحدة من جموع الرسمية من التعبير العادي
قياسا إلى الثيران في الأنجلوسكسونية.
>> حسنا، وبالتالي فإن مكتبة بيثون العديد منكم هنا في شخص لديهم أجهزة ماكينتوش،
حتى تتمكن من سحب فعلا هذا الأمر على الشاشة.
يتم بناؤها التعبيرات العادية في بيثون.
وهكذا تم تحميلها مسبقا على أجهزة ماكينتوش بيثون، وتتوفر أيضا على الإنترنت على هذا الرابط.
لذلك إذا كنت تشاهد يمكنك التوقف وتأكد أن لديك بيثون
كما لعبنا في جميع أنحاء هنا.
هناك دليل على الانترنت، لذلك إذا كنت فقط اكتب بيثون إلى جهاز الكمبيوتر الخاص بك
سترى أن الإصدار يأتي في المحطة.
لذلك أنا قدمت وصلة إلى دليل للإصدار 2 من بيثون، فضلا عن الغش ورقة.
هناك نسخة 3 من بيثون، ولكن ماك الخاص بك لا يعني بالضرورة
تأتي مع أن مسبقة.
لذلك لا تختلف بشكل رهيب.
حسنا، لذلك بعض أساسيات استخدام تعبيرات عادية في بيثون.
>> حتى هنا أنا استخدم تعبير بسيط جدا، لذلك فعلت بيثون استيراد إعادة
وبعد ذلك أخذ نتيجة re.search.
والبحث يأخذ 2 الحجج.
الأول هو التعبير العادي، والثاني هو النص
أو السلسلة التي تريد تحليلها.
وبعد ذلك تطبع في result.group.
لذلك فان هذه هي المهام الأساسية 2 نحن نذهب لنرى اليوم
في التعلم عن التعابير العادية.
حتى مجرد كسر هذا التعبير العادي هنا
ح ومن ثم \ ث ثم م حتى \ ث يقبل فقط أي حرف أبجدي في هناك.
لذلك نحن هنا نبحث عن "H" ثم حرف أبجدي آخر
ثم م، لذلك هنا من شأنها أن تتطابق مع لحم الخنزير
في، "ابراهام لنكولن ولحم الخنزير السندويشات."
هذا هو نتيجة لتلك المجموعة.
شيء آخر يمكن أن نفعله هو استخدام لدينا سلاسل من قبل النص في بيثون.
لذلك اعتقد انني سوف تمضي قدما وسحب ما يصل هنا.
بيثون استيراد الطاقة المتجددة.
وإذا كان لي أن تفعل الشيء نفسه - دعنا نقول النص،
"إبراهيم" دعونا تكبير - هناك نذهب.
النص هو: "إبراهيم يأكل لحم الخنزير."
حسنا، ومن ثم ينتج = re.search.
ومن ثم التعبير لدينا يمكن أن تكون ساعة، وبعد ذلك سوف تفعل نقطة م.
لذلك لا يستغرق سوى نقطة أي حرف غير خط جديد بما في ذلك أرقام،
علامات النسبة المئوية، أي شيء من هذا القبيل.
ثم النص - الطفرة - ثم result.group--نعم.
لذلك هذا هو فقط كيفية تنفيذ الوظائف الأساسية هنا.
إذا كان لدينا حلقة النص الذي - التي نص مجنون - وشملت يقول الكثير من مائلة إلى الوراء
وخيوط داخل والأشياء التي يمكن أن تبدو وكأنها تسلسل هروب،
ثم أننا ربما تريد استخدام إدخال النص الخام للتأكد من أن يتم قبول.
والتي تبدو تماما مثل ذلك.
لذلك إذا كنا نبحث عن كل واحد منهم في هناك لا ينبغي لنا أن العثور على أي شيء.
ولكن هذا هو كيف سيكون تنفيذه؛ فقط قبل سلسلة من
تعبير عادي كنت وضعت حرف R.
>> حسنا، لذلك دعونا الاستمرار.
كل الحق - لذلك دعونا ننظر إلى أنماط متكررة زوجين هنا.
ذلك الشيء الوحيد الذي كنت تريد القيام به هو تكرار الأشياء
كما كنت تبحث من خلال النص.
حتى للقيام تليها أي عدد من ب - لم AB *.
وبعد ذلك هناك سلسلة من القواعد الأخرى أيضا.
ويمكنك أن تبحث كل هذه ما يصل، وأنا سوف تشغيل فقط من خلال بعض
الأكثر شيوعا منها.
حتى AB + هو تليها أي N أكبر من 0 من ب.
AB؟ هو تليها 0 أو 1 من ب.
{N} AB هو تليها N من ب، ثم هلم جرا.
إذا كان لديك 2 الأرقام في الأقواس المتعرجة التي يتم تعيين مجموعة
يمكن أن يكون ربما المتطابقة.
ولذا فإننا سوف تبدو أكثر في أنماط متكررة زوجين في دقيقة واحدة.
حتى 2 الأشياء أن نأخذ في الاعتبار عند استخدام هذه الأدوات مطابقة نمط هنا.
لذلك نقول أننا نريد أن ننظر إلى HM من "ابراهام لنكولن يجعل السندويشات لحم الخنزير."
حتى لقد غيرت اسم ابراهام لنكولن لإبراهيم.
والآن نحن نبحث عن ما يتم إرجاعها من قبل هذه وظيفة البحث،
وتقوم بإرجاع فقط لحم الخنزير في هذه الحالة.
وأنه يفعل ذلك لأن البحث فقط يأخذ من الطبيعي أن معظم قائمة الانتظار اليسار.
وجميع التعابير العادية إلا إذا قمت بتحديد خلاف ذلك سوف نفعل ذلك.
إذا أردنا أن تجد كل ما هو وظيفة لهذا العضو - إيجاد.
بحيث يمكن أن تبدو وكأنها مجرد جميع re.findall = ('h.m'، والنص)
ثم all.group ().
كل ينتج كلا لحم الخنزير ولحم الخنزير، وفي هذه الحالة كلا من السلاسل في كل ابراهام لحم الخنزير.
لذلك هذا هو خيار آخر.
>> كبيرة. الشيء الآخر أن نأخذ في الاعتبار هو أن التعابير العادية تأخذ أكبر حدسي.
دعونا نلقي نظرة على هذا المثال.
فعلنا ذلك اليسرى معظم البحث هنا، وبعد ذلك حاول البحث عن أكبر
باستخدام مشغل نجمة كليين.
وذلك ل، "ابراهام لنكولن يجعل السندويشات لحم الخنزير،" وأنا فقط حصلت على العودة
M نتيجة لذلك.
وكان السبب في هذا الخطأ الذي كان من الممكن أن تتخذ أي عدد من
ح لأنني لم يحدد أي شيء ليذهب في ما بين ساعة وم.
المثال الوحيد هناك الذي كان م - الأمثلة فقط هناك مع م فيه
وأي عدد من لحاء كانت مجرد م السلسلة.
ثم حاولت مرة أخرى؛ قلت، "حسنا، دعونا الحصول على أكبر مجموعة الفعلي هنا".
ثم فعلت ح. * م، بحيث يعود فقط أي عدد من الأحرف بين ساعة وم.
وإذا كنت بدأت للتو والتفكير، "أوه، حسنا، حسنا هذا سوف
يحصل لي لحم الخنزير "، فإنه في الواقع يأخذ كل شيء من ساعة في ابراهام لينكولن
كل وسيلة تصل إلى نهاية لحم الخنزير.
ذلك هو الجشع، بل يرى ح - كل هذا نص آخر - M،
وهذا هو ما يلزم فيه.
هذا هو فظيع للغاية - وهذا هو ميزة في وسعنا أيضا
تحديد لأنه لا يكون الجشع باستخدام وظائف أخرى.
ولكن هذا شيء علينا أن نأخذ في الاعتبار خاصة
عند النظر في نص HTML، الذي هو أحد الأسباب التي
التعبيرات العادية يصعب على HTML.
لأنه إذا كان لديك علامة فتح HTML ومن ثم الكثير من الاشياء في الوسط
ثم أغلقت بعض HTML الأخرى العلامة في وقت لاحق من ذلك بكثير في البرنامج،
كنت قد أكلت للتو الكثير من التعليمات البرمجية HTML الخاصة بك ربما عن طريق الخطأ.
>> كل الحق - الأحرف أكثر من ذلك خاصة، مثل العديد من اللغات الأخرى،
نحن الهرب باستخدام مائل.
حتى نتمكن من استخدام النقطة لتحديد أي حرف باستثناء سطر جديد.
يمكننا استخدام الهروب w لتحديد أي حرف أبجدي.
وقياسا د الهروب لأي عدد صحيح - شخصية العددية.
يمكننا تحديد - يمكننا استخدام الأقواس لتحديد العبارات ذات الصلة.
لذلك هذا سيقبل أ، ب، ج أو.
ويمكننا أيضا تحديد أو خيارات إما A أو B.
على سبيل المثال - إذا كنا نبحث عن إمكانيات متعددة
بين قوسين يمكننا استخدام المشغل أو كما في -
لذلك دعونا نعود إلى هذا المثال هنا.
والآن دعونا نأخذ - دعونا نعود إلى هذا المثال هنا، وبعد ذلك
اتخاذ AE - حتى هذا يجب أن تعود - أعتقد أن هذا لا يزال إبراهيم.
لذلك هذا - إذا فعلنا كل - كبيرة.
لذلك دعونا تحديث النص هنا.
"إبراهيم يأكل لحم الخنزير في حين هدب له - في حين هدب." كبيرة.
جميع. كبيرة. الآن نحصل على لحم الخنزير، ولحم الخنزير، وتنحنح.
بينما هدب - بينما أزيز له - في حين طنين إلى هدب له. كبيرة.
نفس الشيء.
الآن جميع العائدات لا تزال لحم الخنزير فقط، ولحم الخنزير، وتنحنح دون التقاط على همهمة أو له.
رائع - حتى ما إذا أردنا أن ننظر إلى إما أنه - حتى أننا يمكن أن نفعل أيضا
له أو - سنعود إلى ذلك.
حسنا - لذلك - كل الحق - في المواقف التي يمكن أيضا استخدام الإقحام أو علامة الدولار
لتحديد أن كنت تبحث عن شيء ما في بداية أو نهاية السلسلة.
أو بداية أو نهاية الكلمة.
هذا هو واحد طريقة لاستخدام ذلك.
>> حسنا - لذلك دعونا لعب حولها مع كتلة أكبر قليلا من النص.
دعنا نقول هذا الصف هنا - هذا البيان هنا.
قوة التعبير العادية هو أنها يمكن تحديد أنماط
ليس فقط إصلاح حرفا.
دعونا نجعل - دعونا نسمي هذه الكتلة.
ثم سنقرأ كل ذلك فيه.
ومن ثم يكون لها - دعونا نجعل كل =؛ فما هي بعض الأشياء التي يمكن البحث في هنا مربح؟
نحن يمكن أن ننظر للأذن التعبير.
لا مثيرة جدا للاهتمام. ماذا عن ذلك؟ سنرى ما سيحدث.
أعطى ذلك مشكلة.
لذلك أي عدد من الأشياء قبل إعادة وجميع.
بحيث يجب أن تعود كل شيء من البداية حتى ربما كل إعادة بضع مرات.
ثم هنا لدينا قوة التعابير العادية هو أنها
يمكن تحديد أنماط ليس فقط حرفا هنا.
لذلك كل وسيلة تصل إلى النهائي من جديد، أنها بدأت مع أقصى اليسار، وكان الجشع.
دعونا نرى - ماذا يمكن أن نتطلع إليه.
أعتقد أن شيئا واحدا إذا كنت مهتما في البحث عن الضمائر هي وانه،
هل يمكن أن تحقق ليالي يجري على قدم المساواة إلى 0 أو 1
والتعبير هو، والذي ربما لن يعود -
أوه، وأنا أعتقد أنه عاد لأنه ونحن نبحث في السلطة، وذلك اليوم، وهنا.
دعونا نحاول تحديد أن هذا يجب أن يأتي في بداية شيء.
دعونا نرى ما اذا كان يسقط.
حتى نتمكن من القيام الدهون، وهناك لم نحصل على أي شيء لأنها وانه
لا تحدث في هذه العبارة.
كبيرة. حسنا - يعود ذلك إلى القط هنا.
أنماط معقدة لدرجة يضر الدماغ.
لذلك هذا هو السبب في أننا نستخدم التعابير العادية لتجنب هذه المشكلات.
>> حتى هنا بعض وسائط أخرى مفيدة يمكن أن تقوم به مع حولها.
ونحن ننظر في بحث اليوم، ولكن يمكنك أيضا استخدام مباراة، والانقسام، findall، والمجموعات.
الأشياء الرائعة الأخرى حتى تتمكن من القيام مع التعبيرات العادية إلى جانب فقط
يبحث عن أنماط تتخذ نمطا وعقد جميع المباريات -
متغيراته - ومن ثم استخدام تلك التعليمات البرمجية الخاصة بك في وقت لاحق.
يمكن أن تكون مفيدة جدا. الأشياء الأخرى التي يمكن عد.
لذلك نستطيع أن نعول على عدد من الحالات من نمط التعبير العادي،
وهذا هو ما يمكننا استخدام مجموعات ل.
وسائط أخرى هي كذلك أيضا ممكن.
لذلك أنا فقط أريد أن أتحدث أكثر قليلا عن طرق أخرى يمكنك استخدام تعبيرات عادية.
>> لذا على المرء تطبيق أكثر تقدما هو في مطابقة غامض.
حتى إذا كنت تبحث عن نص للتعبير، يوليوس قيصر،
وترى إما جايوس يوليوس قيصر أو اسم يوليوس قيصر في لغات أخرى،
فإنك قد ترغب أيضا في تعيين بعض الوزن لتلك القيم.
وإذا كانت قريبة بما فيه الكفاية - إذا كان يعبر عتبة معينة - ثم تريد
لتكون قادرة على قبول يوليوس قيصر.
لذلك هناك بضعة تطبيقات مختلفة لأنه في بعض اللغات الأخرى كذلك.
وهنا بعض الأدوات الأخرى، رجإكس بال - التطبيق مفيد قليلا على الانترنت ل
تحقق مما إذا وتتكون التعبيرات العادية الخاصة بك بشكل صحيح.
هناك أيضا أدوات بذاتها التي يمكن تشغيلها من سطح المكتب
مثل بيكو جدا، وكذلك كتب الطبخ فقط.
لذلك إذا كنت أفعل المشروع الذي ينطوي على الكثير من التعبيرات العادية
وربما هذا هو المكان المناسب للذهاب خارج نطاق اليوم.
وبعد ذلك فقط لإعطائك فكرة عن كيفية المشترك هو
هناك البقرى في يونكس، وبيرل وقد بنيت في، وC هناك PCRE لC.
وبعد ذلك كل هذه اللغات الأخرى أيضا حزم التعبير العادي
التي تعمل مع نفسها أساسا بناء الجملة حصلنا على طعم اليوم.
PHP، جافا، روبي، وهلم جرا.
>> مدونة جوجل البحث هو في الواقع الجدير بالذكر، بل هي واحدة من
عدد قليل نسبيا من التطبيقات الى ان هناك يسمح للجمهور للوصول إلى
قاعدة البيانات الخاصة به باستخدام التعابير العادية.
لذلك إذا نظرتم على مدونة جوجل البحث يمكنك أن تجد رمز
إذا كنت تبحث عن مثيل كيف يمكن استخدام وظيفة،
يمكنك استخدام تعبير عادي لتجد أن وظيفة تستخدم في جميع أنواع القضايا المختلفة.
هل يمكن أن ننظر لfwrite، ثم هل يمكن أن ننظر لعلم الكتابة أو قراءة
إذا أردت مثالا على fwrite تستخدم في هذه الحالة.
وبالتالي فإن الشيء نفسه هناك، وهنا بعض المراجع.
هذا وسوف تكون متاحة على الانترنت كذلك، والذهاب إلى الأمام حتى إذا
كنت تريد أن تبدو في بيثون، البقرى، بيرل - كنت ترغب فقط في الحصول على بعض الإلهام
أو إذا كنت تريد أن تبدو أكثر في النظرية هنا هي بعض جيدة القفز الأماكن.
شكرا جزيلا.
[CS50.TV]