آئیے ریگولر ایکسپریشنز کا مطالعہ جاری رکھیں۔ اس مضمون میں ہم پہلے سے طے شدہ کرداروں کی کلاسوں کے ساتھ ساتھ مقدار (سلسلوں کی تلاش) کو دیکھیں گے۔
پہلے سے طے شدہ کریکٹر کلاسز
کلاس APIPattern
میں پہلے سے طے شدہ کریکٹر کلاسز ہوتے ہیں جو عام طور پر استعمال ہونے والے ریگولر ایکسپریشنز کے لیے آسان شارٹ کٹ پیش کرتے ہیں۔ اس جدول میں، بائیں کالم میں تعمیرات دائیں کالم میں اظہارات کی شارٹ ہینڈ نمائندگی ہیں۔ مثال کے طور پر، \d
ایک عدد (0-9) کا مطلب ہے، \w
یعنی کوئی بھی بڑے یا چھوٹے حرف، انڈر سکور یا نمبر)۔ جب بھی ممکن ہو پہلے سے طے شدہ کریکٹر کلاسز کا استعمال کریں۔ یہ آپ کے کوڈ کو پڑھنے اور غلطیوں کو ٹھیک کرنے میں آسان بنا دے گا۔ بیک سلیش سے شروع ہونے والی تعمیرات کو فرار یا محفوظ کہا جاتا ہے۔ پچھلے مضامین میں، ہم نے پہلے ہی بیک سلیش یا علامتوں کے ساتھ خصوصی حروف سے بچنے \Q
اور \E
انہیں باقاعدہ حروف کے طور پر استعمال کرنے کے بارے میں بات کی ہے۔ اگر آپ باقاعدہ حروف (لفظی) کے ساتھ بیک سلیش استعمال کرتے ہیں، تو آپ کو اظہار کو مرتب کرنے کے لیے بیک سلیش سے بچنے کی ضرورت ہے۔
private final String REGEX = "\\d"; // цифра
اس مثال میں \d
، ایک باقاعدہ اظہار؛ پروگرام کو مرتب کرنے کے لیے اضافی بیک سلیش ضروری ہے۔ ہمارا ٹیسٹ پروگرام براہ راست کنسول سے ریگولر ایکسپریشن پڑھتا ہے، اس لیے کسی اضافی سلیش کی ضرورت نہیں ہے۔ درج ذیل مثال پہلے سے طے شدہ کریکٹر کلاسز کے استعمال کو ظاہر کرتی ہے: پہلی تین مثالوں میں، ریگولر ایکسپریشن صرف " .
" (ڈاٹ اسپیشل کریکٹر) ہے، جس کا مطلب ہے کوئی بھی کریکٹر۔ لہٰذا تلاش ہر صورت کامیاب رہی۔ دیگر مثالیں پہلے سے طے شدہ کریکٹر کلاسز کا استعمال کرتی ہیں، جن کے معنی ہم نے اوپر دیے گئے جدول میں بیان کیے ہیں۔
کوانٹیفائرز
کوانٹیفائرز آپ کو سٹرنگ میں کسی کریکٹر کی موجودگی کی تعداد بتانے کی اجازت دیتے ہیں۔ آئیے ان پیچیدگیوں پر گہری نظر ڈالتے ہیں کہ لالچی، سست، اور بہت لالچی کوانٹیفائر کیسے کام کرتے ہیں۔ پہلی نظر میں ایسا لگتا ہے کہ کوانٹیفائر X؟, X?? اور X؟+ اسی طرح کام کرتے ہیں: "X ایک بار موجود ہے یا بالکل نہیں۔" ان کوانٹیفائرز کے نفاذ میں معمولی فرق ہیں، جنہیں ہم ذیل میں دیکھیں گے۔زیرو لینتھ میچز
چلو لالچی کے ساتھ شروع کرتے ہیں. آئیے تین مختلف ریگولر ایکسپریشنز لکھتے ہیں: حرف "a" خاص حروف کے ساتھ؟، * یا +۔ آئیے دیکھتے ہیں کہ اگر ہم ان ریگولر ایکسپریشنز کو خالی لائن پر جانچتے ہیں تو کیا ہوتا ہے: اوپر کی مثال میں، پہلی دو صورتوں میں تلاش کامیاب رہی، کیونکہ ایکسپریشنز a؟ اور a* کریکٹر a کو سٹرنگ سے غائب ہونے دیں۔ یہ بھی نوٹ کریں کہ شروع اور آخری میچ کا انڈیکس ایک ہی ہے (0)۔ چونکہ ان پٹ سٹرنگ کی کوئی لمبائی نہیں ہے، اس لیے پروگرام کو پہلی پوزیشن میں کچھ نہیں ملتا :)۔ اس کیس کو زیرو لینتھ میچ کہا جاتا ہے۔ اس طرح کی مماثلتیں کئی صورتوں میں ہوتی ہیں: جب ان پٹ لائن خالی ہو، ان پٹ لائن کے شروع میں، لائن کے آخری حرف کے بعد، یا لائن کے حروف کے درمیان۔ زیرو لینتھ میچز کو تلاش کرنا آسان ہے: وہ ایک ہی پوزیشن پر شروع اور ختم ہوتے ہیں۔ آئیے زیرو لینتھ میچوں کی کچھ اور مثالیں دیکھتے ہیں۔ آئیے کچھ اور مثالوں کے ساتھ صفر کی لمبائی کے میچوں کو دریافت کریں۔ آئیے ان پٹ سٹرنگ کو کریکٹر "a" میں تبدیل کریں اور ایک دلچسپ اثر کا مشاہدہ کریں: تینوں کوانٹیفائرز کو کریکٹر "a" ملا، لیکن پہلے دو، جو کسی کریکٹر کی عدم موجودگی کی اجازت دیتے ہیں، پوزیشن 1 پر صفر کی لمبائی کا میچ ملا۔ - تار کے آخری کردار کے بعد۔ ایسا اس لیے ہوتا ہے کیونکہ پروگرام کردار "a" کو سٹرنگ کے طور پر دیکھتا ہے اور اس کے ذریعے "رن" کرتا ہے جب تک کہ مزید میچ نہ ہوں۔ استعمال شدہ کوانٹیفائر پر منحصر ہے، پروگرام سٹرنگ کے آخر میں "کچھ نہیں" پائے گا یا نہیں پائے گا۔ اب آئیے ان پٹ سٹرنگ کو پانچ حروف "a" کی ترتیب میں تبدیل کرتے ہیں: Regular expression a؟ سٹرنگ میں ہر حرف کے لیے الگ سے ایک میچ تلاش کرتا ہے۔ اظہار a* دو مماثلتیں تلاش کرتا ہے: کریکٹر کی ترتیب "a"' اور پوزیشن 5 پر صفر کی لمبائی کا میچ۔ اور آخر میں، ریگولر ایکسپریشن a+ صرف حروف کی ترتیب تلاش کرتا ہے "a"، بغیر "کچھ نہیں" تلاش کیے :) اگر مختلف حروف پر مشتمل سٹرنگ بطور ان پٹ دی جائے تو کیا ہوگا؟ مثال کے طور پر، "ababaaaab": کردار "b" پوزیشن 1، 3، اور 8 میں ہے اور پروگرام کو ان پوزیشنوں پر صفر کی لمبائی کے میچ ملتے ہیں۔ باقاعدہ اظہار a؟ "b" پر توجہ نہیں دیتا ہے، لیکن صرف "a" کردار کی موجودگی (یا غیر موجودگی) کو تلاش کرتا ہے۔ اگر کوانٹیفائر "a" کی غیر موجودگی کی اجازت دیتا ہے، تو "a" کے علاوہ سٹرنگ کے تمام حروف کو صفر کی لمبائی کے میچ کے طور پر دکھایا جائے گا۔ دی گئی لمبائی کے سلسلے کو تلاش کرنے کے لیے، صرف گھوبگھرالی منحنی خطوط وحدانی میں لمبائی کی وضاحت کریں: باقاعدہ اظہار a{3} تین "a" حروف کی ترتیب کو تلاش کرتا ہے۔ پہلی لائن میں کچھ نہیں ملا کیونکہ لائن میں کافی a's نہیں تھے۔ دوسرا 3 حروف پر مشتمل ہے، جو پروگرام تلاش کرتا ہے. تیسرے ٹیسٹ میں بھی سٹرنگ کے آغاز میں ایک میچ ملتا ہے۔ تیسرے حرف کے بعد کی ہر چیز باقاعدہ اظہار کو پورا نہیں کرتی ہے، ذیل کے کوڈ میں یہ کرتا ہے اور اس میں کئی مماثلتیں ہوں گی: ترتیب کی کم از کم لمبائی بتانے کے لیے، استعمال کریں:Enter your regex: a{3,}
Enter input string to search: aaaaaaaaa
I found the text "aaaaaaaaa" starting at index 0 and ending at index 9.
اس مثال میں، پروگرام کو صرف ایک مماثلت ملتی ہے کیونکہ سٹرنگ (3) "a" حروف کی کم از کم ترتیب کی لمبائی کی ضرورت کو پورا کرتی ہے۔ آخر میں، ترتیب کی زیادہ سے زیادہ لمبائی ترتیب دینا: اس مثال میں، پہلا میچ چھٹے حرف پر ختم ہوا۔ دوسرا میچ چھٹے ایک کے بعد حروف پر مشتمل ہے، کیونکہ وہ کم از کم لمبائی کی ضرورت کو پورا کرتے ہیں۔ اگر سٹرنگ ایک حرف چھوٹا ہوتا تو دوسرا میچ نہیں ہوتا۔
GO TO FULL VERSION