PDA

View Full Version : مبتدی: عبارت باقاعده ای برای تعیین محدوده ای از اعداد



h_r_sh
پنج شنبه 19 مرداد 1391, 17:03 عصر
چطور می توان یک عبارت باقاعده نوشت تا محدوده ای از اعداد را شامل شود؟ مثلا:
برای اعداد کوچکتر مساوی هزار و بزرگتر از صفر.
ضمنا آیا امکان دارد که این محدوده جستجو در زمان اجرا و توسط کاربر تغییر داده شود؟

tooraj_azizi_1035
پنج شنبه 19 مرداد 1391, 19:03 عصر
شما می تونی بعد از استخراج اعداد با Linq رو بازه ای که می خوای فیلتر کنی:


Regex rx=new Regex();

MatchCollection matches = rx.Matches(text,"\d+");

IEnumerable<int> num= from m in matches.OfType<Match>()

where int.Parse(m.Value)>=0 && int.Parse (m.Value)<=100

select int.Parse( m.Value);

به جای 0 و 100 می تونی مقداری در Runtime تعیین کنی.

من تو یه سایت اینارم دیدم:
Here are a few more common ranges that you may want to match:


000..255: ^([01][0-9][0-9]|2[0-4][0-9]|25[0-5])$
0 or 000..255: ^([01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$
0 or 000..127: ^(0?[0-9]?[0-9]|1[0-1][0-9]|12[0-7])$
0..999: ^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$
000..999: ^[0-9]{3}$
0 or 000..999: ^[0-9]{1,3}$
1..999: ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$
001..999: ^(00[1-9]|0[1-9][0-9]|[1-9][0-9][0-9])$
1 or 001..999: ^(0{0,2}[1-9]|0?[1-9][0-9]|[1-9][0-9][0-9])$
0 or 00..59: ^[0-5]?[0-9]$
0 or 000..366: ^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])$


اینارم تست نکردم:

0 or 000..255: (?Z[0..255])
0 or 000..127: (?Z[0..127])
0 or 000..999: (?Z[0..999])
1 or 001..999: (?Z[1..999])
0 or 00..59: (?Z[0..59])
0 or 000..366: (?Z[0..366])

h_r_sh
جمعه 20 مرداد 1391, 17:12 عصر
ممنونم از پاسخ شما. عبارت ^([0-9]|[1-9][0-9]|[1-9][0-9][0-9])$ خوب به نظر می رسه. اما برای 1000 کار نمی کنه. من اینو ^([1-9]|[1-9][0-9]|[1-9][0-9][0-9])$|^(1000) امتحان کردم. از 0 تا 100000 چک کردم درست جواب داد.