JavaRush /جاوا بلاگ /Random-UR /RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مخ...
Artur
سطح
Tallinn

RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔ حصہ 1

گروپ میں شائع ہوا۔
اس مضمون کا اصل یہاں ہے ۔ شاید بہت زیادہ تھیوری جیسی کوئی چیز نہیں ہے، اور میں مضمون کے آخر میں ریجیکس پر مزید تفصیلی مواد کے کئی لنکس فراہم کروں گا۔ لیکن مجھے ایسا لگا کہ باقاعدہ اظہار خیال جیسے موضوع پر غور کرنا بہت زیادہ دلچسپ ہو گا اگر راستے میں چھوٹے چھوٹے کاموں کو مکمل کر کے علم کو فوری طور پر اکٹھا کرنے کا نہ صرف موقع ملے۔ RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 1آو شروع کریں. پروگرامنگ میں عام طور پر ریگولر ایکسپریشنز ('RegEx' یا صرف 'regex') استعمال کرنے کے مخالفین مندرجہ ذیل اقتباس کا حوالہ دیتے ہیں، جس کا انتساب جیمی زونسکی سے ہے: "کچھ لوگ، جب کسی مسئلے کا سامنا کرتے ہیں، سوچتے ہیں، 'میں جانتا ہوں، میں ریگولر ایکسپریشن استعمال کروں گا۔ "اب ان کے دو مسائل ہیں"۔ درحقیقت، ریگولر ایکسپریشنز کا استعمال ابھی تک اچھا یا برا خیال نہیں ہے۔ اور یہ بذات خود مسائل میں اضافہ نہیں کرے گا اور ان میں سے کسی کو بھی حل نہیں کرے گا۔ یہ صرف ایک آلہ ہے۔ اور آپ اسے کیسے استعمال کرتے ہیں (صحیح یا غلط) اس بات کا تعین کرتا ہے کہ آپ کیا نتائج دیکھیں گے۔ اگر آپ regex استعمال کرنے کی کوشش کرتے ہیں، مثال کے طور پر، HTML پارسر بنانے کے لیے، تو آپ کو زیادہ تر درد کا سامنا کرنا پڑے گا ۔ لیکن اگر آپ صرف نکالنا چاہتے ہیں، مثال کے طور پر، کچھ قطاروں سے ٹائم اسٹیمپ، تو شاید آپ ٹھیک ہوں گے۔ آپ کے لیے ریگولر ایکسپریشنز میں مہارت حاصل کرنا آسان بنانے کے لیے، میں نے اس سبق کو اکٹھا کیا ہے جو آپ کو صرف بیس مختصر مراحل میں شروع سے ہی ریگولر ایکسپریشنز میں مہارت حاصل کرنے میں مدد کرے گا۔ یہ ٹیوٹوریل بنیادی طور پر ریگولر ایکسپریشنز کے بنیادی تصورات پر فوکس کرتا ہے اور صرف ضرورت کے مطابق مزید جدید موضوعات پر روشنی ڈالتا ہے۔

مرحلہ 1: ریگولر ایکسپریشن کیوں استعمال کریں۔

RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 2ریگولر ایکسپریشنز مخصوص پیٹرن (پیٹرنز) کا استعمال کرتے ہوئے متن میں مماثلتیں تلاش کرنے کے لیے استعمال کیے جاتے ہیں۔ ریجیکس کا استعمال کرتے ہوئے، ہم متن سے آسانی سے اور آسانی سے الفاظ نکال سکتے ہیں ، نیز انفرادی لغوی اور میٹا حروف اور ان کی ترتیب جو کچھ معیارات پر پورا اترتے ہیں۔ ویکیپیڈیا ہمیں ان کے بارے میں کیا بتاتا ہے یہ ہے: ریگولر ایکسپریشنز میٹا کریکٹرز (وائلڈ کارڈ کریکٹرز) کے استعمال کی بنیاد پر متن میں ذیلی اسٹرنگ کو تلاش کرنے اور ان کو جوڑنے کے لیے ایک رسمی زبان ہیں۔ تلاش کے لیے، ایک نمونہ سٹرنگ (انگریزی پیٹرن، روسی میں اسے اکثر "ٹیمپلیٹ"، "ماسک" کہا جاتا ہے) استعمال کیا جاتا ہے، جس میں علامتیں اور میٹاسیمبلز ہوتے ہیں اور تلاش کے اصول کی وضاحت کرتے ہیں۔ متن میں ہیرا پھیری کرنے کے لیے، ایک متبادل سٹرنگ بھی متعین کی گئی ہے، جس میں خصوصی حروف بھی شامل ہو سکتے ہیں۔ dogپیٹرن اس جملے میں لفظ کی طرح آسان ہوسکتا ہے :
تیز بھوری لومڑی سست کتے پر چھلانگ لگاتی ہے۔
یہ باقاعدہ اظہار اس طرح لگتا ہے:
کتا
...کافی آسان ہے، ہے نا؟ پیٹرن کوئی بھی لفظ ہو سکتا ہے جس میں حرف ہو o۔ اس طرح کے پیٹرن کو تلاش کرنے کے لئے ایک باقاعدہ اظہار اس طرح نظر آسکتا ہے:
\ زبردست * _
( آپ اس ریگولر ایکسپریشن کو یہاں آزما سکتے ہیں ۔) آپ دیکھیں گے کہ جیسے جیسے "مماثل" کے تقاضے زیادہ پیچیدہ ہوتے جاتے ہیں، ریگولر ایکسپریشن بھی پیچیدہ ہوتا جاتا ہے۔ حروف کے گروپوں کی وضاحت کرنے اور دہرائے جانے والے نمونوں کو ملانے کے لیے اشارے کی اضافی شکلیں ہیں، جن کی میں ذیل میں وضاحت کروں گا۔ لیکن، جیسے ہی ہمیں کسی متن میں پیٹرن سے مماثلت ملتی ہے، تو ہم اس کے ساتھ کیا کر سکتے ہیں؟ جدید ریگولر ایکسپریشن انجن آپ کو موجود متن سے حروف یا حروف کی ترتیب (سب اسٹرنگز) نکالنے، یا انہیں ہٹانے، یا انہیں دوسرے متن سے تبدیل کرنے کی اجازت دیتے ہیں۔ عام طور پر، ریگولر ایکسپریشنز کا استعمال متن کو پارس کرنے اور جوڑ توڑ کرنے کے لیے کیا جاتا ہے۔ ہم مثال کے طور پر، ذیلی اسٹرنگز نکال سکتے ہیں جو آئی پی ایڈریس کی طرح نظر آتے ہیں اور پھر ان کی تصدیق کرنے کی کوشش کر سکتے ہیں۔ یا ہم نام اور ای میل ایڈریس نکال کر ڈیٹا بیس میں محفوظ کر سکتے ہیں۔ یا ای میلز میں حساس معلومات (جیسے پاسپورٹ نمبر یا فون نمبر) تلاش کرنے کے لیے ریگولر ایکسپریشنز کا استعمال کریں اور صارف کو متنبہ کریں کہ وہ خود کو خطرے میں ڈال سکتے ہیں۔ Regex واقعی ایک ورسٹائل ٹول ہے جسے سیکھنا آسان ہے لیکن اس پر عبور حاصل کرنا مشکل ہے: "جس طرح موسیقی کے کسی ٹکڑے کو اچھی طرح سے چلانے اور موسیقی بنانے میں فرق ہے، اسی طرح ریگولر ایکسپریشنز کو جاننے اور انہیں سمجھنے میں بھی فرق ہے۔" - جیفری ای ایف فریڈل، باقاعدہ اظہار پر عبور حاصل کرنا

مرحلہ 2: مربع بریکٹ[]

سب سے آسان ریگولر ایکسپریشنز جو سمجھنے میں آسان ہیں وہ ہیں جو ریگولر ایکسپریشن پیٹرن اور ٹارگٹ سٹرنگ کے درمیان کریکٹر بہ کریکٹر میچ تلاش کرتے ہیں۔ آئیے، مثال کے طور پر، ایک بلی کو تلاش کرنے کی کوشش کریں: RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 3
پیٹرن: بلی
string: بلی گاڑی کے نیچے بھاگنے پر کاٹ دی گئی۔
میچز:      ^^^
( یہ عملی طور پر کیسے کام کرتا ہے - یہاں دیکھیں ) NB! تمام حل یہاں صرف ممکنہ حل کے طور پر پیش کیے گئے ہیں۔ باقاعدہ اظہار میں، جیسا کہ عام طور پر پروگرامنگ میں، آپ ایک ہی مسائل کو مختلف طریقوں سے حل کر سکتے ہیں۔ تاہم، حروف کے لحاظ سے ایک سخت موازنہ کے علاوہ، ہم مربع بریکٹ کا استعمال کرتے ہوئے متبادل مماثلت کی بھی وضاحت کر سکتے ہیں:
پیٹرن: ca[rt]
string: بلی گاڑی کے نیچے بھاگنے پر کاٹ دی گئی۔
میچز:      ^^^ ^^^
( یہ کیسے کام کرتا ہے ) مربع بریکٹ کھولنا اور بند کرنا ریگولر ایکسپریشن انجن کو بتاتا ہے کہ اسے کسی بھی مخصوص حروف سے مماثل ہونا چاہیے، لیکن صرف ایک۔ مندرجہ بالا باقاعدہ اظہار، مثال کے طور پر، cartپورا لفظ نہیں ملے گا، لیکن اس کا صرف ایک حصہ ملے گا:
پیٹرن: ca[rt]
string: بلی کاٹ دی گئی جب وہ گاڑی کے نیچے بھاگی۔
میچز:      ^^^ ^^^
( یہ کیسے کام کرتا ہے ) جب آپ مربع بریکٹ استعمال کرتے ہیں، تو آپ ریگولر ایکسپریشن انجن سے کہتے ہیں کہ بریکٹ کے اندر موجود حروف میں سے صرف ایک سے مماثل ہو۔ انجن کو کریکٹر مل جاتا ہے c، پھر کریکٹر a، لیکن اگر اگلا کریکٹر نہیں ہے rیا t، تو یہ مکمل میچ نہیں ہے۔ اگر یہ مل جاتا ہے ca، اور پھر یا تو r، یا t، یہ رک جاتا ہے۔ یہ زیادہ حروف سے ملنے کی کوشش نہیں کرے گا کیونکہ مربع بریکٹ اشارہ کرتے ہیں کہ موجود حروف میں سے صرف ایک کو ملانے کی ضرورت ہے۔ جب اسے مل جاتا ہے تو caیہ اگلے rلفظ میں پاتا ہے cartاور رک جاتا ہے کیونکہ اس نے ترتیب کے لیے پہلے ہی ایک مماثلت ڈھونڈ لی ہے car۔

تربیت کے مقاصد:

ایک ریگولر ایکسپریشن لکھیں جو مقامی بولی میں ناقابل ترجمہ پن کے اس اقتباس hadمیں تمام 10 نمونوں سے میل کھاتا ہو:Had
پیٹرن:
string: جم، جہاں بل کے پاس "had" تھا ، "had had" تھا ۔ "ہوتا" درست تھا۔
میچز:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( ممکنہ حل یہاں دیکھیں ) درج ذیل جملے میں جانوروں کے تمام ناموں کا کیا ہوگا؟
پیٹرن:
تار: ایک چمگادڑ، ایک بلی، اور ایک چوہا ایک بار میں چلے گئے...
میچز:    ^^^ ^^^ ^^^
( ممکنہ حل ) یا اس سے بھی آسان: الفاظ تلاش کریں barیا bat:
پیٹرن:
تار: ایک چمگادڑ، ایک بلی، اور ایک چوہا ایک بار میں چلے گئے...
میچز:    ^^^ ^^^
( ممکنہ حل ) اب ہم پہلے ہی سیکھ چکے ہیں کہ کم و بیش پیچیدہ ریگولر ایکسپریشن کیسے لکھیں، اور ہم صرف مرحلہ 2 پر ہیں! آئیے جاری رکھیں!

مرحلہ 3: فرار کے سلسلے

RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 4پچھلے مرحلے میں، ہم نے مربع بریکٹ کے بارے میں []اور یہ سیکھا کہ وہ ریجیکس انجن کا استعمال کرتے ہوئے متبادل میچ تلاش کرنے میں ہماری مدد کیسے کرتے ہیں۔ لیکن اگر ہم خود کھلے اور بند مربع بریکٹ کی شکل میں میچ تلاش کرنا چاہتے ہیں تو کیا ہوگا []؟ جب ہم لفظ کا ایک حرف بہ حرف ملاپ تلاش کرنا چاہتے تھے تو catہم نے حروف کی اس ترتیب کے ساتھ ریجیکس انجن فراہم کیا ( cat)۔ آئیے []اسی طرح مربع بریکٹ تلاش کرنے کی کوشش کریں:
پیٹرن: [] 
سٹرنگ: آپ ریجیکس کا استعمال کرتے ہوئے [] سے میچ نہیں کر سکتے ہیں! آپ کو یہ افسوس ہوگا!
میچز: 
( آئیے دیکھتے ہیں کیا ہوا ) کچھ کام نہیں ہوا، تاہم... یہ اس لیے ہے کہ مربع بریکٹ کے حروف خاص ریجیکس انجن کے حروف کے طور پر کام کرتے ہیں جو عام طور پر کسی اور چیز کی نشاندہی کرنے کے لیے استعمال ہوتے ہیں، اور یہ خود ان سے ملنے کے لیے لفظی نمونہ نہیں ہیں۔ جیسا کہ ہمیں مرحلہ 2 سے یاد ہے، وہ متبادل مماثلتیں تلاش کرنے کے لیے استعمال کیے جاتے ہیں تاکہ ریجیکس انجن ان کے درمیان موجود کسی بھی حروف سے مماثل ہو سکے۔ اگر آپ ان کے درمیان کوئی حرف نہیں ڈالتے ہیں تو اس سے خرابی ہو سکتی ہے۔ ان خصوصی حروف سے مماثل ہونے کے لیے، ہمیں بیک سلیش کیریکٹر کے ساتھ ان سے پہلے ان سے بچنا چاہیے \۔ بیک سلیش (یا بیک سلیش) ایک اور خاص کریکٹر ہے جو ریجیکس انجن کو کہتا ہے کہ اگلے کردار کو لفظی طور پر تلاش کرے، بجائے اس کے کہ اسے میٹا کریکٹر کے طور پر استعمال کرے۔ ریجیکس انجن صرف کرداروں کی تلاش کرے گا [اور ]لفظی طور پر اگر وہ دونوں بیک سلیش سے پہلے ہوں:
پیٹرن: \[\]
string: آپ regex کا استعمال کرتے ہوئے [] سے میچ نہیں کر سکتے! آپ کو یہ افسوس ہوگا!
میچز:                  ^^ 
( آئیے دیکھتے ہیں کہ اس بار کیا ہوا ) ٹھیک ہے، اگر ہم خود بیک سلیش تلاش کرنا چاہتے ہیں تو کیا ہوگا؟ جواب بہت سادہ ہے۔ چونکہ بیک سلیش \بھی ایک خاص کردار ہے، اس لیے اسے بھی فرار ہونے کی ضرورت ہے۔ کیسے؟ بیک سلیش!
پیٹرن: \\
string: C:\Users\Tanja\Pictures\dogs
میچز:    ^ ^ ^ ^
( عملی طور پر ایک ہی مثال ) صرف خاص حروف کو بیک سلیش سے پہلے ہونا چاہیے۔ دوسرے تمام حروف کی لفظی تشریح بطور ڈیفالٹ کی جاتی ہے۔ مثال کے طور پر، باقاعدہ اظہار tلفظی طور پر صرف tچھوٹے حروف سے ملتا ہے:
پیٹرن: t
string: tttt
میچز: ^ ^ ^ ^
( مثال ) تاہم، یہ ترتیب \tمختلف طریقے سے کام کرتی ہے۔ یہ ٹیب کریکٹر کی تلاش کے لیے ایک ٹیمپلیٹ ہے:
پیٹرن: t
string: tttt
میچز:   ^ ^ ^
( مثال کے طور پر ) کچھ عام فرار کے سلسلے میں شامل ہیں \n(UNIX-style line breaks) اور \r(Windows-style line breaks میں استعمال کیا جاتا ہے \r\n\rایک "کیریج ریٹرن" کیریکٹر ہے اور \nایک "لائن فیڈ" کریکٹر ہے، دونوں کی تعریف ASCII معیار کے ساتھ اس وقت کی گئی تھی جب ٹیلی ٹائپ رائٹرز اب بھی بڑے پیمانے پر استعمال میں تھے۔ اس ٹیوٹوریل میں بعد میں فرار ہونے کے دوسرے عام سلسلے کا احاطہ کیا جائے گا۔

اس دوران، آئیے چند آسان پہیلیاں کے ساتھ مواد کو تقویت دیں:

تلاش کرنے کے لیے ایک ریگولر ایکسپریشن لکھنے کی کوشش کریں... ایک ریگولر ایکسپریشن؛) نتیجہ کچھ اس طرح ہونا چاہیے:
پیٹرن:
string: ... اس regex ` \[\] ` کو ریجیکس کے ساتھ میچ کریں؟
میچز:                       ^^^^	
( حل ) کیا آپ نے انتظام کیا؟ بہت اچھے! اب اس طرح فرار کے سلسلے کو تلاش کرنے کے لیے ایک ریجیکس بنانے کی کوشش کریں:
پیٹرن:
string: ` \r `، ` \t `، اور ` \n ` تمام ریجیکس فرار کے سلسلے ہیں۔
میچز:   ^^ ^^ ^^
( حل )

مرحلہ 4: ڈاٹ کا استعمال کرتے ہوئے "کوئی بھی" کردار تلاش کریں۔.

RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 5فرار کی ترتیب کے مماثل حل لکھتے وقت جو ہم نے پچھلے مرحلے میں دیکھے تھے، آپ نے سوچا ہو گا، "کیا میں بیک سلیش کیریکٹر اور پھر اس کے بعد آنے والے کسی دوسرے کردار سے میچ کر سکتا ہوں؟"... یقیناً آپ کر سکتے ہیں! ایک اور خاص حرف ہے جو (تقریباً) کسی بھی حرف سے ملنے کے لیے استعمال ہوتا ہے - ڈاٹ (فُل سٹاپ) کریکٹر۔ یہ کیا کرتا ہے:
پیٹرن :
string: مجھے افسوس ہے، ڈیو۔ مجھے ڈر ہے کہ میں ایسا نہیں کر سکتا۔
میچز: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( مثال ) اگر آپ صرف ان نمونوں سے مماثل ہونا چاہتے ہیں جو فرار کے سلسلے کی طرح نظر آتے ہیں، تو آپ کچھ ایسا کر سکتے ہیں:
پیٹرن: \\. 
سٹرنگ: ہیلو والمارٹ میرا پوتا ہے وہاں اس کا نام " \n \r \t " ہے۔
میچز:                                              ^^ ^^ ^^	
( مثال کے طور پر ) اور، جیسا کہ تمام خاص حروف کے ساتھ، اگر آپ کسی لغوی سے مماثل ہونا چاہتے ہیں .، تو آپ کو اس سے پہلے ایک حروف کی ضرورت ہوگی \:
پیٹرن: \. 
تار: جنگ امن ہے ۔ آزادی غلامی ہے ۔ جہالت ہی طاقت ہے ۔ 
میچز:             ^ ^ ^
( مثال )

مرحلہ 5: کردار کی حدود

RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 6اگر آپ کو کسی علامت کی ضرورت نہیں ہے، لیکن صرف متن میں حروف تلاش کرنا چاہتے ہیں تو کیا ہوگا؟ یا نمبر؟ یا حرف؟ کریکٹر کلاسز اور ان کی حدود کے لحاظ سے تلاش کرنے سے ہمیں یہ حاصل کرنے کا موقع ملے گا۔
` \ n `، ` \ r `، اور ` \ t ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔	
حروف "سفید جگہ" ہیں اگر وہ متن میں مرئی نشان نہیں بناتے ہیں۔ اسپیس " " ایک اسپیس، لائن بریک، یا ٹیب ہے۔ ہم کہتے ہیں کہ ہم فرار کی ترتیب تلاش کرنا چاہتے ہیں جو صرف وائٹ اسپیس حروف کی نمائندگی کرتے ہیں \n، \rاور \tاوپر کے حوالے میں، لیکن دیگر فرار کے سلسلے نہیں۔ ہم یہ کیسے کر سکتے ہیں؟
پیٹرن: \\[nrt] 
string: ` \n `، ` \r `، اور ` \t ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:   ^^ ^^ ^^	
( مثال کے طور پر ) یہ کام کرتا ہے، لیکن یہ بہت خوبصورت حل نہیں ہے۔ کیا ہوگا اگر بعد میں ہمیں "فارم فیڈ" کیریکٹر کے لیے فرار کی ترتیب سے ملنے کی ضرورت ہو، \f؟ (یہ علامت متن میں صفحہ کے وقفے کی نشاندہی کرنے کے لیے استعمال ہوتی ہے۔)
پیٹرن: \\[nrt] 
string: ` \n `، ` \r `، ` \t `، اور ` \f ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:   ^^ ^^ ^^	
( حل کام نہیں کر رہا ہے ) اس نقطہ نظر کے ساتھ، ہمیں مربع بریکٹ میں ہر چھوٹے حروف کو الگ سے درج کرنے کی ضرورت ہے جو ہم میچ کرنا چاہتے ہیں۔ ایسا کرنے کا ایک آسان طریقہ یہ ہے کہ کسی بھی چھوٹے حروف سے ملنے کے لیے کریکٹر رینجز کا استعمال کریں:
پیٹرن: \\[az] 
string: ` \n `، ` \r `، ` \t `، اور ` \f ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:   ^^ ^^ ^^ ^^	
( اور یہ پہلے سے ہی کام کرتا ہے ) اوپر کی مثال کے پیش نظر کریکٹر رینجز آپ کی توقع کے مطابق کام کرتے ہیں۔ پہلے اور آخری حروف کے ارد گرد مربع بریکٹ رکھیں جس کے درمیان آپ مماثل ہونا چاہتے ہیں، درمیان میں ایک ہائفن کے ساتھ۔ \مثال کے طور پر، اگر آپ صرف بیک سلیش کے "سیٹ" اور ایک حرف سے aتک تلاش کرنا چاہتے ہیں m، تو آپ درج ذیل کام کر سکتے ہیں:
پیٹرن: \\[am] 
string: ` \n `، ` \r `، ` \t `، اور ` \f ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:                         ^^	
( مثال ) اگر آپ متعدد رینجز سے مماثل ہونا چاہتے ہیں، تو بس انہیں مربع بریکٹ کے درمیان آخر سے آخر تک رکھیں:
پیٹرن: \\[a-gq-z] 
string: ` \n `، ` \r `، ` \t `، اور ` \f ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:         ^^ ^^ ^^	
( مثال ) دیگر عام حروف کی حدود میں شامل ہیں: A-Zاور0-9

آئیے انہیں عملی طور پر آزمائیں اور کچھ مسائل حل کریں:

ہیکساڈیسیمل نمبروں میں ہندسوں 0-9کے ساتھ ساتھ حروف بھی ہوسکتے ہیں A-F۔ جب رنگوں کی وضاحت کے لیے استعمال کیا جاتا ہے، تو ہیکساڈیسیمل کوڈز زیادہ سے زیادہ تین حروف پر مشتمل ہو سکتے ہیں۔ ذیل کی فہرست میں درست ہیکساڈیسیمل کوڈز تلاش کرنے کے لیے ایک ریگولر ایکسپریشن بنائیں:
پیٹرن:
string: 1H8 4E2 8FF 0P1 T8B 776 42B G12
میچز:      ^^^ ^^^ ^^^ ^^^	
( حلy ) کریکٹر رینجز کا استعمال کرتے ہوئے، ایک باقاعدہ اظہار بنائیں جو نیچے دیے گئے جملے میں صرف چھوٹے حروف کو منتخب کرے گا (حروف نہیں، بشمول ):
پیٹرن:
سٹرنگ: Th e w a lls i n th e m a ll a r e t o t a lly ، t ​​o t a lly  t a ll ۔
مماثلتیں:   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( حل )

مرحلہ 6: "نہیں"، کیریٹ، سرم فلیکس، کیریٹ... علامت^

RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔  حصہ 1 - 7واقعی، اس علامت کے لیے 9000 سے زیادہ نام ہیں :) لیکن، سادگی کے لیے، شاید ہم "نہیں" پر توجہ مرکوز کریں گے۔ میرا آخری مسئلہ کا حل تھوڑا طویل ہے۔ یہ کہنے میں 17 حروف لگے "حروف کے علاوہ مکمل حروف تہجی حاصل کریں۔" یقیناً ایسا کرنے کا ایک آسان طریقہ ہے۔ "نہیں" کا نشان ^ہمیں حروف اور حروف کی حدود کی وضاحت کرنے کی اجازت دیتا ہے جو پیٹرن میں متعین کردہ حروف سے مماثل نہیں ہونا چاہیے۔ مندرجہ بالا آخری مسئلے کا ایک آسان حل یہ ہے کہ ایسے حروف تلاش کیے جائیں جو حرف کی نمائندگی نہیں کرتے ہیں۔
پیٹرن: [^aeiou] 
string:   Th e w a lls i n th e m a ll a r e t o t a lly، t o t a lly  t a ll۔ 
مماثلتیں: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( مثال کے طور پر^ ) مربع بریکٹ میں سب سے بائیں کریکٹر کے طور پر "not" کا نشان []ریگولر ایکسپریشن انجن کو ایک (کسی بھی) کریکٹر سے ملنے کے لیے کہتا ہے جو مربع بریکٹ میں نہیں ہے۔ اس کا مطلب یہ ہے کہ مندرجہ بالا ریگولر ایکسپریشن جملے کے شروع میں تمام خالی جگہوں، ادوار .، کوما ,اور کیپٹلز سے بھی میل کھاتا ہے۔ Tان کو خارج کرنے کے لیے، ہم انہیں مربع بریکٹ میں بھی رکھ سکتے ہیں:
پیٹرن: [^ aeiou .,T] سٹرنگ  
: The w a lls i n the m a ll a r e t o t ali , t o t a lly t a ll ۔ 
مماثلتیں:   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( مثال ) نوٹکہ اس صورت میں، ہمیں بیک سلیش کے ساتھ مدت سے بچنے کی ضرورت نہیں ہے، جیسا کہ ہم نے پہلے کیا تھا جب ہم مربع بریکٹ استعمال کیے بغیر اسے تلاش کرتے تھے۔ مربع بریکٹ میں بہت سے خاص حروف کو لفظی طور پر سمجھا جاتا ہے، بشمول کھلا [- لیکن اختتامی - ]بریکٹ کا کردار نہیں (کیا آپ اندازہ لگا سکتے ہیں کہ کیوں؟) بیک سلیش کردار کی \بھی لفظی تشریح نہیں کی جاتی ہے۔ اگر آپ \مربع بریکٹ کا استعمال کرتے ہوئے لغوی بیک سلیش سے مماثل ہونا چاہتے ہیں، تو آپ کو اس سے پہلے درج ذیل بیک سلیش سے بچنا ہوگا \\۔ یہ طرز عمل اس لیے ڈیزائن کیا گیا تھا کہ سفید جگہ کے حروف کو بھی ملاپ کے لیے مربع بریکٹ میں رکھا جا سکے:
پیٹرن: [\t]
string: tttt
میچز:   ^ ^ ^
( مثال کے طور پر ) "نہیں" کا نشان ^حدود کے ساتھ بھی استعمال کیا جا سکتا ہے۔ اگر میں صرف حروف کی گرفت کرنا چاہتا ہوں a, b, c, x, yاور z, میں کچھ ایسا کر سکتا ہوں:
پیٹرن: [abcxyz] 
string:   abc defghijklmnopqrstuvw xyz 
میچز: ^^^ ^^^
( مثال کے طور پر ) ...یا، میں یہ بتا سکتا ہوں کہ میں کوئی ایسا کردار تلاش کرنا چاہتا ہوں جو اور کے درمیان نہ ہو : dw
پیٹرن: [^dw] 
string:   abc defghijklmnopqrstuvw xyz 
میچز: ^^^ ^^^
( مثال ) تاہم،محتاط رہیں"نہیں" کے ساتھ ^۔ یہ سوچنا آسان ہے کہ "اچھا، میں نے وضاحت کی ہے [^ b-f]، اس لیے مجھے چھوٹے حروف aیا اس کے بعد کچھ اور ملنا چاہیے f۔ ایسا نہیں ہے۔ یہ ریجیکس کسی ایسے حرف سے مماثل نہیں ہوگا جو اس حد میں نہیں ہے، بشمول حروف، اعداد، اوقاف، اور خالی جگہیں۔
پیٹرن: [^dw] 
string:   abc defg h ۔ i ، j - klmnopqrstuvw xyz 
مماثلتیں: ^^^ ^ ^ ^ ^ ^ ^ ^ ^
( مثال )

کاموں کو برابر کرنا:

مربع بریکٹ میں "not" کے نشان کا استعمال کریں ^تاکہ نیچے دیے گئے ان تمام الفاظ سے مماثل ہو جو اس پر ختم نہیں ہوتے y:
پیٹرن:
string: day dog ​​hog hay bog bay ray rub 
matches:      ^^^ ^^^ ^^^ ^^^	
( حل^ ) 1977 اور 1982 کے درمیان تمام سال تلاش کرنے کے لیے رینج اور "نہیں" کے نشان کا استعمال کرتے ہوئے ایک باقاعدہ اظہار لکھیں (بشمول):
پیٹرن:
سٹرنگ: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
میچز:            ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
( حل ) تمام حروف تلاش کرنے کے لیے ایک باقاعدہ اظہار لکھیں جو "not" علامتی کردار نہیں ہیں ^:
پیٹرن:
سٹرنگ:   abc1 ^ 23*() 
میچز: ^^^^ ^^^^^	
( حل )

مرحلہ 7: کریکٹر کلاسز

کریکٹر کلاسز کریکٹر رینجز سے بھی آسان ہیں۔ مختلف ریگولر ایکسپریشن انجنوں کی مختلف کلاسیں دستیاب ہیں، اس لیے میں یہاں صرف اہم کا احاطہ کروں گا۔ (چیک کریں کہ آپ ریجیکس کا کون سا ورژن استعمال کر رہے ہیں، کیونکہ ان میں سے اور بھی ہو سکتے ہیں - یا وہ یہاں دکھائے گئے ورژن سے مختلف ہو سکتے ہیں۔) کریکٹر کلاسز تقریباً رینجز کی طرح کام کرتی ہیں، لیکن آپ 'شروع' اور 'اختتام' کی قدروں کی وضاحت نہیں کر سکتے:
کلاس علامتیں
\d "نمبر"[0-9]
\w "لفظ کی علامتیں"[A-Za-z0-9_]
\s "خالی جگہیں"[ \t\r\n\f]
"لفظ" کیریکٹر کلاس \wخاص طور پر مفید ہے کیونکہ یہ کریکٹر سیٹ اکثر مختلف پروگرامنگ زبانوں میں درست شناخت کنندگان (متغیر نام، فنکشن کے نام وغیرہ) کے لیے درکار ہوتا ہے۔ ہم \wباقاعدہ اظہار کو آسان بنانے کے لیے استعمال کر سکتے ہیں جو ہم نے پہلے دیکھا تھا:
پیٹرن: \\[az] 
string: ` \n `، ` \r `، ` \t `، اور ` \f ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:   ^^ ^^ ^^ ^^	
اس کا استعمال کرتے ہوئے \wہم اس طرح لکھ سکتے ہیں:
پیٹرن: \\\w 
سٹرنگ: ` \ n `، ` \ r `، ` \ t `، اور ` \ f ` وائٹ اسپیس کے حروف ہیں ، ` `، ` \\ ` اور ` \[ ` نہیں ہیں ۔
میچز:   ^^ ^^ ^^ ^^	
( مثال )

قسمت کے لیے 2 کام:

جیسا کہ آپ اور میں جانتے ہیں، جاوا میں، ایک شناخت کنندہ (متغیر کا نام، کلاس، فنکشن وغیرہ) صرف حرف a- zA- Z، ڈالر کے نشان $یا انڈر سکور سے شروع ہو سکتا ہے _۔ ( انڈر لائننگ، یقیناً، برا انداز ہے، لیکن مرتب کرنے والا اسے چھوڑ دیتا ہے، مترجم کا نوٹ )۔ باقی حروف "لفظ" کے حروف ہونے چاہئیں \w۔ ایک یا زیادہ کریکٹر کلاسز کا استعمال کرتے ہوئے، درج ذیل تین حروف کے سلسلے میں درست جاوا شناخت کنندگان کو تلاش کرنے کے لیے ایک باقاعدہ اظہار بنائیں:
پیٹرن:
string:   __e $12 .x2 foo بار 3mm
میچز: ^^^ ^^^ ^^^ ^^^	
( حل ) US سوشل سیکورٹی نمبرز (SSN) XXX-XXX-XXXX فارمیٹ میں 9 ہندسوں کے نمبر ہیں، جہاں ہر X کوئی بھی ہندسہ ہو سکتا ہے [0-9]۔ ایک یا زیادہ کریکٹر کلاسز کا استعمال کرتے ہوئے، نیچے دی گئی فہرست میں درست طریقے سے فارمیٹ شدہ SSN تلاش کرنے کے لیے ایک ریگولر ایکسپریشن لکھیں:
پیٹرن:
سٹرنگ: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
میچز:              ^^^^^^^^^^^
( حل ) RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔ حصہ 2۔ ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے 20 مختصر اقدامات۔ حصہ 3۔ RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔ حصہ 4۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION