PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : RegEx is Greedy !!!



آبجی
14th February 2010, 01:07 AM
کلا عبارات باقاعده به “حریص بودن” معروف هستند.
منظور اینه که در تمامی عبارت، در تمامی رشته ها، حتی به عنوان زیر رشته ای از رشته جستجو و جایگذاری انجام میشه و حتی اگر جستجو از پایان عبارت شروع بشه، RegEx جستجو رو از ابتدای عبارت ادامه میده!
تمامی حالات بالا، عملکرد پیش فرض RegEx و تمایلات اون بدون در نظر گرفتن عبارت باقاعده ای که می نویسیم هست.
به عنوان مثال، عبارت زیر رو در نظر بگیرید: <B>Salam</B><B>Khoobi</B>
اگر برای عبارت فوق عبارت باقاعده ی ذیل رو بنویسیم:
<[Bb]>.*<[Bb]>
نتیجه ی برگشتی، کل عبارت <B>Salam</B><B>Khoobi</B> هست.
دلیل این رفتار به همون خصیصه ی حریص بودن RegEx بر میگرده. در مثال فوق تمامی عبارت بین <B> و </B> برگشت داده میشه در صورتی که انتظار داریم دو عبارت برگشت داده بشه!
در RegEx یک عبارت Greeky (حریص) رو میشه به یک عبارت Lazy (تنبل) تبدیل کرد.
معادل * عبارت ?*
معادل + عبارت ?+
معادل {,n} عبارت ?{,n} هست.
بنابراین اصلاح شده ی عبارت RegEx ما به شکل ذیل خواهد شد:
<[Bb]>.*?<[Bb]>

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد