[Powered by Google Translate] [سمینار: تطبیق الگو با عبارات منظم] [دانشگاه جان Mussman، هاروارد] [این CS50. CS50.TV] باشه. خوب، همگی خوش آمدید. این، CS50 2012 است. نام من جان است، و من صحبت خواهد کرد امروز در مورد عبارات منظم است. عبارات منظم است که در درجه اول یک ابزار، بلکه گاهی اوقات استفاده می شود در کد به طور فعال به اساسا الگوها و رشته مطابقت داشته باشد. بنابراین در اینجا، یک کمیک وب از XKCD است. در این کمیک است رمز و راز قتل وجود دارد که در آن قاتل است به دنبال کسی در تعطیلات، و قهرمانان جستجو از طریق ایمیل به دنبال یک آدرس 200 مگابایت. و آنها را تا زمانی که کسی که می داند از عبارات منظم - احتمالا ابرقهرمان - swoops های پایین و می نویسد: برخی از کد و رمز و راز قتل را حل میکند. بنابراین احتمالا این خواهد بود چیزی که از شما خواهد قدرت را به انجام پس از این سمینار است. ما فقط به ارائه یک معرفی مختصر به زبان و شما را به اندازه کافی امکانات پس از منابع بیشتر در مورد خود را به رفتن. بنابراین عبارات منظم نگاه واقع شبیه به این. این بیان به طور منظم در روبی است. این وحشتناکی در سراسر زبان های مختلف نیست. ما فقط بر کوفتگی زخم برای شروع و علامت بیان به طور منظم در روبی. و این یک عبارت منظم برای نگاه در الگوی آدرس ایمیل است. بنابراین ما می بینیم در اولین کمی به نظر می رسد برای هر کاراکتر الفبایی. این است زیرا آدرس ایمیل اغلب باید با یک حرف الفبا شروع. و سپس هر از کاراکتر ویژه ای به دنبال نماد @. و سپس همان چیز را برای نام دامنه. و پس از آن بین 2 و 4 کاراکتر برای. com، خالص، و به همین ترتیب. به طوری که نمونه ای دیگر از عبارت منظم است. بنابراین عبارات منظم پروتکل برای پیدا کردن الگوهای در متن هستند. آنها این کار مقایسه، انتخاب و جایگزین. بنابراین یک مثال سوم پیدا کردن تمام شماره تلفن های پایان دادن به در سال 54 در یک دایرکتوری. بنابراین قبل از دیوید ریپ تا دایرکتوری CS50 ما می تواند برای جستجو یک الگوی که در آن ما باید از پرانتز و سپس شماره 3 پس از آن پایان دادن به پرانتز، 3 عدد، یک خط تیره، 2 شماره، و سپس 54. و خواهد بود که اساسا چگونه ما آمده ایم تا با یک عبارت منظم برای آن جستجو. بنابراین وجود دارد - ما برخی از چیزهایی که در CS50 انجام شده است، که یک کمی شبیه عبارات منظم، به طوری که - برای مثال - در فایل dictionary.C برای بررسی املا مجموعه مشکل شما ممکن است مورد استفاده قرار fscanf به خواندن در یک کلمه از فرهنگ لغت. و شما می توانید 45s درصد است که به دنبال یک رشته از 45 کاراکتر است. پس از آن است که تا حدودی مانند بیان ابتدایی به طور منظم. و شما می توانید هر 45 کاراکتر است که مناسب این لایحه در آن وجود دارد و انتخاب کسانی که تا. و سپس به مثال دوم در مشکل جدید ترین برنامه نویسی وب در کد توزیع برای پی اچ پی ما در واقع بیان ساده به طور منظم. و این یکی فقط به سادگی به دنبال بررسی کنید اگر صفحه وب است که در گذشت منطبق یا با نام کاربری خود وارد شوید و یا خروج برای ثبت نام اینجا را کلیک کنید. پی اچ پی. و سپس بازگشت درست یا نادرست بر اساس که مطابق با عبارت منظم است. بنابراین، هنگامی که می توانم بیان به طور منظم استفاده می کنید؟ چرا شما امروز در اینجا؟ بنابراین شما نمی خواهید به استفاده از عبارات منظم زمانی که چیزی است که وجود دارد آیا این کار را برای شما حتی راحت تر. بنابراین، XML و HTML در واقع بسیار از روی حیله و تزویر برای نوشتن عبارات منظم برای ما در کمی را مشاهده کنید. بنابراین تجزیه کننده های اختصاص داده شده برای آن دسته از زبان ها وجود دارد. شما همچنین نیاز به درست با آف تجارت و دقت اغلب. اگر شما می خواهید - بنابراین ما یک عبارت منظم را برای آدرس ایمیل، اما می گویند شما می خواستم یک آدرس ایمیل خاص و به تدریج عبارات منظم ممکن است پیچیده تر آن را به عنوان دقیق تر شد. به طوری که می تواند یک تجارت خاموش است. شما باید مطمئن شوید که شما خوب ساخت با بیان این که به طور منظم. اگر شما می دانید دقیقا همان چیزی است که شما به دنبال آن ممکن است احساس بیشتری را در زمان قرار داده و ارسال یک تجزیه کننده موثر تر. و در نهایت یک مسئله تاریخی با نظم وجود دارد از عبارات و زبان. عبارات منظم در واقع بسیار قوی تر می باشد عبارات منظم در در یک مفهوم رسمی می گویند. بنابراین من نمی خواهم بیش از حد به نظریه رسمی، اما اکثر زبانها که ما کد در واقع به طور منظم نیست. و این است که چرا گاهی اوقات عبارات منظم در نظر گرفته که امن نیست. بنابراین اساسا یک سلسله مراتب چامسکی برای زبان وجود دارد، و از عبارات منظم ساخت تا با استفاده از اتحادیه، الحاق، و عملیات ستاره کلین که ما در عرض چند دقیقه را مشاهده کنید. اگر شما علاقه مند در تئوری بسیار زیادی در رفتن وجود دارد در زیر کاپوت وجود دارد. بنابراین تاریخچه مختصری - فقط برای بافت در اینجا - مجموعه منظم نفوذ در 1950s، و پس از آن ما تا به حال سردبیران ساده است که گنجانیده شده از عبارات منظم - فقط برای رشته. Grep - که یک ابزار خط فرمان است - یکی از اولین بود ابزار بسیار محبوب که عبارات منظم در 1960s گنجانیده شده است. در '80s، پرل ساخته شد - یک زبان برنامه نویسی است که شامل عبارات منظم بسیار برجسته است. و سپس بیشتر به تازگی ما به پرل بیان سازگار به طور منظم داشتند پروتکل اساسا در زبان های دیگر که با استفاده از بسیاری از همان نحو. البته مهم ترین اتفاق در سال 2008 بود جایی که اولین روز ملی عبارات منظم وجود دارد، که به اعتقاد من ژوئن 1، اگر شما می خواهید که برای بزرگداشت. نظریه باز هم، فقط کمی بیشتر در اینجا. بنابراین یک زن و شوهر روش های مختلف ساخت عبارات منظم وجود دارد. یکی از راه های ساده است برای ساخت این بیان که می خواهید به اجرا بر روی رشته تفسیر - اساسا ساخت یک برنامه کوچک است که مینی قطعه از یک رشته را تجزیه و تحلیل کنید و ببینید، "اوه، این جا بیان به طور منظم یا نه؟" و سپس اجرا است. بنابراین اگر شما بیان بسیار کوچک به طور منظم، این است که احتمالا کارآمد ترین راه برای انجام آن است. و پس از آن اگر شما - گزینه دیگری است که برای حفظ بازسازی بیان که شما بروید، و که امکان شبیه سازی است. و این تلاش های اولیه در الگوریتم عبارت منظم نسبتا ساده و نسبتا سریع است، اما بسیاری از انعطاف پذیری ندارد. بنابراین برای انجام حتی برخی از چیزهایی که ما می رویم به نگاه امروز ما تا به حال برای انجام این کار به طور منظم بیان پیچیده تر پیاده سازی است که به طور بالقوه بسیار کندتر است، به طوری که چیزی است که به یاد داشته باشید است نیز وجود دارد انکار عبارات منظم از انواع حمله که پتانسیل برای این پیاده سازی های جدیدتر از بهره برداری عبارات منظم برای تبدیل شدن به بسیار پیچیده است. و بسیار احساس همان است که ما در حملات سرریز بافر دیدم، شما باید حملات که کار ساخت حلقه های بازگشتی که تاخت و تاز کردن ظرفیت حافظه. و راه Regexen یکی از جمع رسمی بیان به طور منظم است با قیاس به گاو در آنگلوساکسون. خوب، بنابراین بسیاری از شما در اینجا شخص کتابخانه پایتون مکینتاش، بنابراین شما در واقع می توانید بکشید تا بر روی صفحه نمایش خود را. عبارات منظم به پایتون ساخته شده است. و به همین ترتیب پایتون بر روی مکینتاش و به صورت آنلاین نیز در این لینک در دسترس قبل نصب شده است. بنابراین اگر شما در حال تماشای شما می توانید مکث و مطمئن شوید که شما باید پایتون همانطور که ما در اینجا بازی در اطراف. یک کتابچه راهنمای کاربر آنلاین وجود دارد، بنابراین اگر شما فقط نوع پیتون به کامپیوتر شما شما خواهید دید که نسخه می آید تا در ترمینال. بنابراین من یک لینک به کتابچه راهنمای کاربر برای نسخه 2 پایتون همچنین به عنوان یک تقلب ورق ارائه شده است. نسخه 3 از پایتون وجود دارد، اما مک خود را لزوما با که قبل نصب شده آمده است. بنابراین وحشتناکی متفاوت نیست. خوب، بنابراین برخی از اصول اولیه استفاده از عبارات منظم در پایتون. بنابراین در اینجا من با استفاده از یک بیان بسیار ساده است، بنابراین من پایتون مجدد واردات و سپس در زمان از re.search. و جستجو 2 آرگومان می گیرد. اولین عبارت منظم است، و دوم متن و یا رشته ای که شما می خواهید به تجزیه و تحلیل. و سپس من چاپ result.group است. بنابراین این 2 توابع اساسی ما می رویم برای دیدن امروز در یادگیری در مورد عبارات منظم. پس فقط شکستن این عبارت منظم در اینجا ساعت و سپس \ w و سپس متر تا \ W فقط هر حرف الفبا در آن وجود دارد می پذیرد. بنابراین در اینجا ما به دنبال "ح" و پس از آن یکی دیگر از شخصیت بر اساس حروف الفبا و سپس متر، بنابراین در اینجا است که ژامبون مطابقت ، "آبراهام لینکلن و ژامبون ساندویچ." این نتیجه از آن گروه است. یکی دیگر از چیزی است که ما می توانیم انجام دهیم، استفاده از رشته ها قبل از ما از متن در پیتون. بنابراین من حدس می زنم من به پیش خواهد رفت و جلو که در اینجا. پایتون مجدد واردات. و اگر من برای انجام کار مشابه - اجازه بدهید به ما می گویند متن است، "ابراهیم،" اجازه دهید ما زوم - وجود دارد ما به. متن، "ابراهیم ژامبون می خورد." خوب، و پس از آن منجر = re.search. و سپس بیان می تواند ساعت، و پس از آن من به نقطه متر انجام. بنابراین نقطه فقط طول می کشد هر شخصیت است که یک خط جدید از جمله تعداد نیست، نشانه درصد، هر چیزی شبیه به آن. و پس از آن متن - رونق - و سپس result.group-آره. به طوری که فقط چگونه برای پیاده سازی قابلیت های اساسی در اینجا. اگر ما تا به حال یک حلقه متنی که - که متن دیوانه - شامل می گویند بسیاری از اسلش پشت و رشته در داخل و چیزهایی است که می تواند مانند توالی فرار نگاهی، پس ما احتمالا می خواهید به استفاده از ورودی متن خام را به مطمئن شوید که پذیرفته است. که فقط به نظر می رسد مانند آن. بنابراین اگر ما برای هر یک از آنها در آن وجود دارد، به دنبال می کرده اند ما باید هر چیزی را پیدا کند. اما این است که چگونه شما می توانید پیاده سازی آن، درست قبل از رشته ای از عبارت منظم شما قرار داده حرف R. خوب، پس به ما اجازه نگه داشتن رفتن. همه حق - بنابراین اجازه دهید ما در یک زن و شوهر الگوهای تکراری در اینجا نگاه کنید. بنابراین آن چیزی است که می خواهید انجام دهید تکرار همه چیز که شما در جستجوی از طریق متن است. بنابراین برای انجام و پس از هر تعداد از ب - آیا شما AB *. و پس از آن یک سری از قوانین دیگر نیز وجود دارد. و شما می توانید تمام از این تا نگاه، من فقط از طریق برخی از اجرا اغلب آنهایی که استفاده می شود. بنابراین AB + است و پس از هر n بزرگتر از 0 ب. AB؟ توسط 0 یا 1، از ب. AB {N} است توسط N ب، و سپس به همین ترتیب. اگر شما باید 2 اعداد در آکولاد شما در حال تعیین محدوده است که می تواند احتمالا همسان. بنابراین ما در یک زن و شوهر الگوهای تکراری در یک دقیقه نگاه کنید. بنابراین 2 چیزهایی که در ذهن داشته باشیم که با استفاده از این الگوی تطبیق ابزار اینجا. بنابراین می گویند ما می خواهیم در HM نگاه کنید، "آبراهام لینکلن می سازد ساندویچ ژامبون." بنابراین من تغییر نام آبراهام لینکلن به ابراهیم. و در حال حاضر ما به دنبال آنچه که توسط این تابع جستجو بازگشت، و آن را تنها ژامبون در این مورد می گرداند. و آن را که چون جستجو فقط به طور طبیعی طول می کشد سمت چپ ترین صف. و تمام عبارات منظم مگر اینکه شما در غیر این صورت مشخص انجام خواهد داد که. اگر ما می خواستیم برای پیدا کردن همه یک تابع برای آن وجود دارد - پیدا کردن تمام. به طوری که فقط می تواند را مثل همه = re.findall ('h.m'، متن) نگاهی و پس از آن all.group (). همه تولید هر دو ژامبون و ژامبون، در این مورد هر دو رشته در ابراهیم هر ژامبون. به طوری که گزینه دیگری است. بزرگ است. چیز دیگری در ذهن داشته باشیم این است که به طور مستقیم از عبارات منظم را بزرگترین. اجازه دهید ما در این مثال نگاه کنید. ما که از چپ به راست: جستجو در اینجا، و سپس تلاش من جستجو بزرگتر با استفاده از عملگر ستاره کلین. بنابراین برای "آبراهام لینکلن می سازد ساندویچ ژامبون،" و من تنها شدم متر به عنوان یک نتیجه. دلیل آن اشتباه بود که من می توانستم گرفته شده هر تعداد از ساعت چرا که من هر چیزی را در بین H و M مشخص نیست. تنها عنوان مثال وجود دارد که تا به حال متر - تنها نمونه های وجود دارد با متر در آن و هر تعداد از ساعت فقط رشته متر بودند. سپس من آن را سعی کردم دوباره، من گفتم: "خوب، اجازه دهید ما بزرگترین گروه واقعی در اینجا." و سپس من در ساعت. * متر، به طوری که فقط هر تعداد از شخصیت های بین h و m می گرداند. و اگر شما فقط از شروع کردن و فکر کردن، "اوه، خوب، به خوبی این کار من ژامبون، آن را در واقع همه چیز، از ساعت طول می کشد در آبراهام لینکلن تمام راه را تا پایان ژامبون. حریص است، آن را می بیند در ساعت - این همه متن دیگر - M، و این چیزی است که در آن طول می کشد. این است که مشخص است - این یکی از ویژگی های ما همچنین می توانیم است مشخص برای آن را نمی شود های حریص با استفاده از توابع دیگر. اما این چیزی است که ما باید در ذهن داشته باشیم به خصوص است زمانی که به دنبال در متن HTML غیر، که یکی از دلایلی است که عبارات منظم برای HTML دشوار است. از آنجا که اگر شما یک تگ HTML باز شده و پس از آن بسیاری از مسائل در عمق و سپس برخی دیگر از HTML بسیار بعد از تگ بسته در این برنامه، شما فقط خورده تا مقدار زیادی از کد HTML غیر فعال خود را احتمالا اشتباه است. همه در سمت راست - شخصیت ویژه، مانند بسیاری از زبان های دیگر، ما فرار با استفاده از علامت ممیز. بنابراین ما می توانیم نقطه برای مشخص کردن هر شخصیت به جز برای یک خط جدید استفاده کنید. ما می توانیم فرار W به تعیین هر حرف الفبا استفاده کنید. و با قیاس د فرار برای هر عدد صحیح - شخصیت عددی. ما می توانید مشخص کنید - ما می توانیم براکت برای مشخص کردن عبارات مرتبط استفاده کنید. بنابراین این که A، B، یا C را بپذیرید. و ما نیز می توانید مشخص کنید و یا گزینه هایی برای هر دو یا ب. به عنوان مثال - اگر ما برای احتمالات مختلف به دنبال در داخل پرانتز ما می تواند اپراتور و یا به عنوان در استفاده - بنابراین اجازه دهید ما به عقب برویم به این مثال در اینجا. و در حال حاضر اجازه دهید ما را - به ما اجازه بازگشت به این مثال در اینجا، و سپس AE - بنابراین این باید گشت - من حدس می زنم این است که هنوز ابراهیم. بنابراین این - اگر ما همه - بزرگ است. بنابراین متن به روز رسانی ما در اینجا بگذارید. "ابراهیم می خورد ژامبون در حالی که hemming خود را - در در حالی که hemming" بزرگ است. همه. بزرگ است. در حال حاضر ما ژامبون، ژامبون، و سجاف. در حالی که hemming - در حالی که زمزمه به او - در حالی که زمزمه به سجاف او. بزرگ است. همین. در حال حاضر همه می گرداند هنوز فقط ژامبون، ژامبون، و سجاف بدون برداشتن در همهمه یا او را. بزرگ - پس چه اگر ما می خواستیم به هر دو نگاه کنید که - به طوری که ما می تواند انجام دهد او و یا - ما به آن باز می گردد. خوب - همه - حق - در موقعیت شما همچنین می توانید استفاده از هشتک یا علامت دلار برای مشخص که شما به دنبال چیزی در آغاز یا پایان یک رشته. و یا شروع و یا پایان یک کلمه. این یکی از راه های استفاده از آن است. خوب - بنابراین اجازه دهید ما در سراسر بازی با یک بلوک کمی بزرگتر از متن. اجازه بدهید به ما این سطر می گویند - این بیانیه در اینجا. قدرت بیان به طور منظم است که آنها می توانند الگوهای مشخص نه تنها شخصیت ثابت شده است. اجازه دهید ما را - اجازه دهید ما این بلوک تماس بگیرید. سپس ما از همه آن شوید. به عنوان خوانده شده و پس از آن - اجازه دهید ما را تمام =، بنابراین آنچه برخی از چیزهایی که ما می توانیم در اینجا سودآوری جستجو؟ ما می تواند برای گوش بیان نگاه کنید. بسیار جالب است. چگونه است که در؟ خواهیم دید که چه اتفاقی می افتد. من به آن مشکل است. بنابراین هر تعداد از چیزها قبل از آنکه دوباره و تمام. به طوری که باید همه چیز را از ابتدا تا همه دوباره شاید چند بار بازگشت. و سپس در اینجا ما باید قدرت از عبارات منظم است که آنها می تواند الگوهای مشخص نه تنها شخصیت های اینجا هستند. بنابراین تمام راه را تا دوباره نهایی، آن را با سمت چپ آغاز شده و حریص بود. اجازه دهید به ما مراجعه کنید - چه چیز دیگری می تواند به ما برای نگاه. من حدس می زنم یک چیزی که اگر شما علاقه مند در به دنبال ضمایر او و او، شما می توانید برای مساوی به 0 یا 1 بودن را بررسی کنید و بیان او، و این که احتمالا نمی خواهید به بازگشت - آه، من حدس می زنم آن را به او بازگشته است چرا که ما به دنبال در قدرت، آن روز، در اینجا. اجازه دهید ما را امتحان کنید مشخص است که این است که در آغاز چیزی آمده است. اجازه بدهید به ما مراجعه کنید در صورتی که قطره. بنابراین ما می توانیم چربی انجام دهد، وجود دارد و ما چیزی به دست نمی چرا که او و او در این عبارت رخ نمی دهد. بزرگ است. خوب - بازگشت به گربه. بنابراین الگوهای پیچیده در حال صدمه زدن به مغز است. به طوری که به همین دلیل ما استفاده از عبارات منظم برای جلوگیری از این مسائل است. بنابراین در اینجا برخی از حالت های دیگر مفید شما می توانید با بازی در اطراف. ما در جستجو نگاه امروز، اما شما همچنین می توانید استفاده از بازی، تقسیم findall، و گروه. بنابراین چیزهای دیگر خنک شما می توانید با عبارات منظم در کنار تنها به دنبال الگوهای در حال شکل گرفتن یک الگو و برگزاری همه مسابقات - متغیر های آن - و پس از آن با استفاده از آن در کد شما بعد. که می تواند بسیار مفید باشد. چیزهای دیگر ممکن است شمارش. بنابراین ما می توانیم تعدادی از موارد از یک الگوی عبارت منظم به حساب، و این چیزی است که ما می توانیم گروه برای استفاده. و حالت های دیگر نیز امکان پذیر است. بنابراین من فقط می خواهم به صحبت کمی بیشتر در مورد راه های دیگر شما می توانید از عبارات منظم استفاده کنید. بنابراین یک نرم افزار پیشرفته تر در تطبیق فازی است. بنابراین اگر شما به دنبال یک متن برای بیان، جولیوس سزار، و شما هم Gaius ژولیوس سزار یا نام ژولیوس سزار را در زبان های دیگر، سپس شما همچنین ممکن است بخواهید برای اختصاص دادن برخی از وزن به آن ارزش ها. و اگر آن را به اندازه کافی نزدیک است - اگر آن را عبور از یک آستانه خاص - سپس شما می خواهید به قادر به پذیرفتن ژولیوس سزار. بنابراین یک زن و شوهر از پیاده سازی های مختلف برای آن در چند زبان دیگر نیز وجود دارد. در اینجا برخی از ابزارهای دیگر، عبارت منظم پال - یک برنامه کوچک دستی آنلاین بررسی کنید که آیا عبارات منظم خود را به درستی تشکیل شده است. هم وجود دارد ابزار مستقل است که شما می توانید از دسکتاپ خود را اجرا کنید مثل پیکو فوق العاده، و همچنین آشپزی عادلانه. بنابراین اگر شما در حال انجام یک پروژه که شامل یک تن از عبارات منظم این است که احتمالا مکان خارج از محدوده امروز. و پس از آن فقط به شما یک حس مشترک آن است که به من بدهید grep در یونیکس وجود دارد، پرل ساخته شده است در، و C است PCRE C. وجود دارد و سپس تمام این زبان های دیگر نیز بسته های بیان به طور منظم که با اساسا نحو مشابه ما یک طعم و مزه امروز کار. پی اچ پی، جاوا، روبی، و به همین ترتیب. کد جستجو در گوگل است که در واقع به ذکر است، آن است که یکی از برنامه های کاربردی نسبتا کمی وجود دارد که اجازه می دهد تا به مردم برای دسترسی به پایگاه داده خود را با استفاده از عبارات منظم. بنابراین اگر شما در جستجوی گوگل کد نگاه کنید، شما می توانید پیدا کردن کد اگر شما به دنبال یک نمونه از اینکه چگونه یک تابع ممکن است مورد استفاده قرار گیرد، شما می توانید یک عبارت منظم برای پیدا کردن که تابع که در تمام انواع موارد مختلف استفاده می شود استفاده کنید. شما می توانید برای fwrite نگاه کنید، و سپس شما می توانید برای پرچم از نوشتن نگاه یا با هم بخوانید اگر شما می خواهید یک نمونه از fwrite که در این مورد استفاده می شود. بنابراین همان چیزی که وجود دارد، و در اینجا برخی از منابع می باشد. این خواهد بود که آنلاین در دسترس است به عنوان خوب، رفتن به جلو اگر شما می خواهید در پایتون، grep، پرل نگاهی - شما فقط می خواهید برای دریافت برخی از الهام یا اگر می خواهید به نگاه در این نظریه در اینجا برخی از پریدن خوب کردن مکان است. بسیار متشکرم. [CS50.TV]