-
RegEx is Greedy !!!
کلا عبارات باقاعده به “حریص بودن” معروف هستند.
منظور اینه که در تمامی عبارت، در تمامی رشته ها، حتی به عنوان زیر رشته ای از رشته جستجو و جایگذاری انجام میشه و حتی اگر جستجو از پایان عبارت شروع بشه، 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]>
Forum Modifications By
Marco Mamdouh