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

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

گروپ میں شائع ہوا۔
RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔ حصہ 1۔ RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔ حصہ 2: اس حصے میں ہم ان چیزوں کی طرف بڑھیں گے جو قدرے پیچیدہ ہیں۔ لیکن ان میں مہارت حاصل کرنا، جیسا کہ پہلے، مشکل نہیں ہوگا۔ میں دہراتا ہوں کہ RegEx اصل میں اس سے زیادہ آسان ہے جتنا یہ پہلے لگتا ہے، اور آپ کو اس میں مہارت حاصل کرنے اور عملی طور پر اس کا استعمال شروع کرنے کے لیے راکٹ سائنسدان بننے کی ضرورت نہیں ہے۔ اس مضمون کا اصل انگریزی یہاں ہے ۔ ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر اقدامات۔  حصہ 3 - 1

مرحلہ 11: ()کیپچرنگ گروپس کے طور پر قوسین

ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر اقدامات۔  حصہ 3 - 2آخری مسئلے میں، ہم نے مختلف قسم کی عددی اقدار اور فلوٹنگ پوائنٹ (ڈاٹ) عددی اقدار کو تلاش کیا۔ لیکن ریگولر ایکسپریشن انجن ان دو قسم کی اقدار میں فرق نہیں کرتا تھا، کیونکہ ہر چیز کو ایک بڑے ریگولر ایکسپریشن میں قید کیا گیا تھا۔ ہم ریگولر ایکسپریشن انجن کو مختلف قسم کے میچوں میں فرق کرنے کے لیے کہہ سکتے ہیں اگر ہم اپنے چھوٹے پیٹرن کو قوسین میں بند کر دیں:
پیٹرن: ([AZ])|([az]) 
string:   بولیویا کے موجودہ صدر Evo Morales ہیں ۔
مماثلتیں: ^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
گروپ:    122 2222222 122222222 22 1222222 22 122 1222222  
( مثال ) مندرجہ بالا ریگولر ایکسپریشن دو کیپچر گروپس کی وضاحت کرتا ہے جو 1 سے شروع ہوتے ہوئے انڈیکس کیے جاتے ہیں۔ پہلا کیپچر گروپ کسی ایک بڑے حروف سے میل کھاتا ہے، اور دوسرا کیپچر گروپ کسی ایک چھوٹے حرف سے ملتا ہے۔ |'یا' نشان اور قوسین کو کیپچر کرنے والے گروپ کے طور پر استعمال کرتے ہوئے ()، ہم ایک ہی ریگولر ایکسپریشن کی وضاحت کر سکتے ہیں جو متعدد قسم کے تاروں سے میل کھاتا ہے۔ اگر ہم اسے مضمون کے پچھلے حصے سے اپنے طویل/فلوٹ سرچ ریجیکس پر لاگو کرتے ہیں، تو ریجیکس انجن مناسب گروپس میں متعلقہ میچوں کو حاصل کر لے گا۔ یہ جانچ کر کہ ذیلی سٹرنگ کس گروپ سے مماثل ہے، ہم فوری طور پر تعین کر سکتے ہیں کہ آیا یہ فلوٹ ویلیو ہے یا لمبی ویلیو:
پیٹرن: (\d*\.\d+[fF]|\d+\.\d*[fF]|\d+[fF])|(\d+[lL]) 
string:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0.
میچز: ^^^ ^^^^ ^^ ^^ ^^^ 
گروپ:    222 1111 22 11 111  
( مثال ) یہ باقاعدہ اظہار کافی پیچیدہ ہے، اور اسے بہتر طور پر سمجھنے کے لیے، آئیے اسے توڑتے ہیں اور ان میں سے ہر ایک پیٹرن کو دیکھتے ہیں:
(// کسی بھی "فلوٹ" سبسٹرنگ سے میل کھاتا ہے۔
  \d*\.\d+[fF]
  |
  \d+\.\d*[fF]
  |
  \d+[fF]
)
| //یا
(// کسی بھی "لمبی" سبسٹرنگ سے میل کھاتا ہے۔
  \d+[lL]
)
|قوسین میں نشان اور کیپچر کرنے والے گروپ ()ہمیں مختلف قسم کے ذیلی اسٹرنگز سے ملنے کی اجازت دیتے ہیں۔ اس صورت میں، ہم یا تو فلوٹنگ پوائنٹ نمبرز "float" یا لمبے عدد "Long" کو ملا رہے ہیں۔
(
  \d*\.\d+[fF] // اعشاریہ کے دائیں جانب 1+ ہندسے
  |
  \d+\.\d*[fF] // اعشاریہ کے بائیں جانب 1+ ہندسے
  |
  \d+[fF] // کوئی ڈاٹ نہیں، صرف 1+ ہندسے
)
|
(
  \d+[lL] // کوئی ڈاٹ نہیں، صرف 1+ ہندسے۔
)
"فلوٹ" کیپچر گروپ میں، ہمارے پاس تین اختیارات ہیں: اعشاریہ پوائنٹ کے دائیں طرف کم از کم 1 ہندسوں والے نمبر، اعشاریہ کے بائیں جانب کم از کم 1 ہندسے والے نمبر، اور بغیر اعشاریہ کے اعداد۔ ان میں سے کوئی بھی "فلوٹ" ہے جب تک کہ ان کے آخر میں "f" یا "F" حروف شامل ہوں۔ "لمبے" کیپچر گروپ کے اندر، ہمارے پاس صرف ایک آپشن ہے - ہمارے پاس 1 یا اس سے زیادہ ہندسوں کے بعد حرف "l" یا "L" ہونا چاہیے۔ ریگولر ایکسپریشن انجن دی گئی اسٹرنگ میں ان سب اسٹرنگز کو تلاش کرے گا اور مناسب کیپچر گروپ میں انڈیکس کرے گا۔ نوٹکہ ہم ان نمبروں میں سے کسی بھی نمبر سے مماثل نہیں ہیں جن میں "l"، "L"، "f" یا "F" شامل نہ ہو۔ ان نمبروں کی درجہ بندی کیسے کی جائے؟ ٹھیک ہے، اگر ان کے پاس اعشاریہ نقطہ ہے تو، جاوا زبان پہلے سے "ڈبل" ہو جاتی ہے۔ بصورت دیگر ان کا "int" ہونا ضروری ہے۔

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

مندرجہ بالا ریجیکس میں دو اور کیپچر گروپس شامل کریں تاکہ یہ ڈبل یا int نمبروں کی بھی درجہ بندی کرے۔ (یہ ایک اور مشکل سوال ہے، اگر اس میں کچھ وقت لگے تو مایوس نہ ہوں، آخری حربے کے طور پر میرا حل دیکھیں۔)
پیٹرن:
اسٹرنگ:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0. 
مماثلتیں: ^^^ ^^ ^^^^ ^^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ 
گروپ:    333 44 1111 33 222 11 111 22
( حل ) اگلا مسئلہ تھوڑا سا آسان ہے۔ درج ذیل عمروں کو ترتیب دینے کے لیے بریکٹڈ کیپچر گروپس ()، 'یا' نشان، |اور کریکٹر رینجز کا استعمال کریں: "امریکہ میں شراب پینا قانونی ہے۔" (>= 21) اور "امریکہ میں پینے کی اجازت نہیں ہے" (<21):
پیٹرن:
سٹرنگ:   7 10 17 18 19 20 21 22 23 24 30 40 100 120 
میچز: ^^^ ^^ ^^ ^^ ^^ 
^^ ^^ ^^ ^^    ^^ ^^ ^^ ^^ ^^ ^^ ^^ 22 22 22 22 22 11 11 11 11 11 111 111 
( حل )

مرحلہ 12: پہلے مزید مخصوص میچوں کی شناخت کریں۔

ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر اقدامات۔  حصہ 3 - 3اگر آپ نے "قانونی شراب پینے والوں" کو دوسرے کی بجائے پہلے کیپچر گروپ کے طور پر بیان کرنے کی کوشش کی تو آپ کو آخری کام میں کچھ پریشانی ہوئی ہوگی۔ اس کی وجہ سمجھنے کے لیے آئیے ایک اور مثال دیکھیں۔ فرض کریں کہ ہم 4 سے کم حروف اور 4 یا اس سے زیادہ حروف پر مشتمل کنیتوں کو الگ الگ ریکارڈ کرنا چاہتے ہیں۔ آئیے پہلے کیپچر گروپ کو چھوٹے نام دیتے ہیں اور دیکھتے ہیں کہ کیا ہوتا ہے:
پیٹرن: ([AZ][az]?[az]?)|([AZ][az][az][az]+) 
string:   Kim Job s Xu Clo yd Moh r Ngo Roc k.
مماثلتیں: ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ 
گروپ:    111 111 11 111 111 111 111   
( مثال ) پہلے سے طے شدہ طور پر، زیادہ تر ریگولر ایکسپریشن انجن ان بنیادی حروف کے خلاف لالچی مماثلت کا استعمال کرتے ہیں جو ہم نے اب تک دیکھے ہیں۔ اس کا مطلب یہ ہے کہ ریگولر ایکسپریشن انجن فراہم کردہ ریگولر ایکسپریشن میں جتنا جلد ممکن ہو سکے سب سے طویل گروپ کو پکڑ لے گا۔ لہذا جب کہ اوپر والا دوسرا گروپ مثال کے طور پر "نوکریاں" اور "کلائیڈ" جیسے ناموں میں مزید کرداروں کو پکڑ سکتا ہے، لیکن چونکہ ان ناموں کے پہلے تین حروف پہلے کیپچر گروپ کے ذریعے پہلے ہی پکڑے جا چکے تھے، اس لیے انہیں دوسرے کے ذریعے دوبارہ نہیں پکڑا جا سکتا۔ . اب ایک چھوٹی سی تصحیح کرتے ہیں - صرف کیپچر گروپس کی ترتیب کو تبدیل کریں، پہلے زیادہ مخصوص (لمبا) گروپ رکھ کر:
پیٹرن: ([AZ][az][az][az]+)|([AZ][az]?[az]?) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
مماثلتیں: ^^^ ^^^^ ^^^^^ ^^^^ ^^^^ ^^^^ 
گروپ:    222 1111 22 11111 1111 222 1111    
( مثال )

کام... اس بار صرف ایک :)

ایک "زیادہ مخصوص" پیٹرن کا مطلب ہمیشہ "لمبا" ہوتا ہے۔ ہم کہتے ہیں کہ ہم دو قسم کے "الفاظ" تلاش کرنا چاہتے ہیں: پہلے وہ جو سر کے ساتھ شروع ہوتے ہیں (مزید خاص طور پر)، پھر وہ جو سر سے شروع نہیں ہوتے ہیں (کوئی دوسرا لفظ)۔ ان دو گروہوں سے مماثل تاروں کو پکڑنے اور شناخت کرنے کے لیے ایک باقاعدہ اظہار لکھنے کی کوشش کریں۔ (نیچے دیے گئے گروپس نمبر کے بجائے حروف میں ہیں۔ آپ کو یہ طے کرنا ہوگا کہ کون سا گروپ پہلے سے مطابقت رکھتا ہے اور کون سا دوسرے سے۔)
پیٹرن:
string:   pds6f uub 24r2gp ewqrty l ui_op 
میچز: ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
گروپ:    NNNNN VVV NNNNN VVVVV N VVVVV
( حل ) عام طور پر، آپ کا باقاعدہ اظہار جتنا زیادہ درست ہوگا، یہ اتنا ہی لمبا ہوگا۔ اور یہ جتنا زیادہ درست ہوگا، اتنا ہی کم امکان ہے کہ آپ کسی ایسی چیز کو پکڑ لیں گے جس کی آپ کو ضرورت نہیں ہے۔ لہذا جب وہ خوفناک نظر آسکتے ہیں، طویل ریجیکس ~= بہتر ریجیکس۔ بدقسمتی سے .

مرحلہ 13: {}تکرار کی ایک مخصوص تعداد کے لیے گھوبگھرالی منحنی خطوط وحدانی

ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر اقدامات۔  حصہ 3 - 4پچھلے مرحلے کے آخری ناموں کے ساتھ مثال میں، ہمارے پاس ایک پیٹرن میں 2 تقریباً دہرائے جانے والے گروپ تھے:
پیٹرن: ([AZ][az][az][az]+)|([AZ][az]?[az]?) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
مماثلتیں: ^^^ ^^^^ ^^^^^ ^^^^ ^^^^ ^^^^ 
گروپ:    222 1111 22 11111 1111 222 1111    
پہلے گروپ کے لیے، ہمیں چار یا زیادہ حروف والے آخری ناموں کی ضرورت تھی۔ دوسرے گروپ کو تین یا اس سے کم حروف کے ساتھ کنیتوں پر قبضہ کرنا تھا۔ کیا ان [a-z]گروپس کو بار بار دہرانے کے علاوہ اسے لکھنے کا کوئی آسان طریقہ ہے؟ موجود ہے اگر آپ اس کے لیے گھوبگھرالی منحنی خطوط وحدانی استعمال کرتے ہیں {}۔ گھوبگھرالی منحنی خطوط وحدانی {}ہمیں پچھلے کردار یا کیپچر گروپ کے کم از کم اور (اختیاری طور پر) زیادہ سے زیادہ تعداد کی وضاحت کرنے کی اجازت دیتے ہیں۔ استعمال کی تین صورتیں ہیں {}:
{X} // بالکل X اوقات سے مماثل ہے۔
{X,} // میچز >= X اوقات
{X,Y} // میچز >= X اور <= Y اوقات
یہاں ان تین مختلف نحو کی مثالیں ہیں:
پیٹرن: [az]{11} 
string:   humuhumunuk unukuaapua'a.
میچز: ^^^^^^^^^^^   
( مثال )
پیٹرن: [az]{18,} 
string:   humuhumunukunukuaapua 'a.
میچز: ^^^^^^^^^^^^^^^^^^^^^    
( مثال )
پیٹرن: [az]{11,18} 
string:   humuhumunukunukupua'a .
میچز: ^^^^^^^^^^^^^^^^^    
( مثال ) مندرجہ بالا مثالوں میں نوٹ کرنے کے لیے کئی نکات ہیں۔نوٹ:. سب سے پہلے، {X} اشارے کا استعمال کرتے ہوئے، پچھلا کریکٹر یا گروپ اس نمبر (X) بار سے بالکل مماثل ہوگا۔ اگر "لفظ" میں (نمبر X سے زیادہ) زیادہ حروف ہیں جو پیٹرن سے مل سکتے ہیں (جیسا کہ پہلی مثال میں دکھایا گیا ہے)، تو وہ میچ میں شامل نہیں ہوں گے۔ اگر حروف کی تعداد X سے کم ہے، تو پورا میچ ناکام ہو جائے گا (پہلی مثال میں 11 سے 99 کو تبدیل کرنے کی کوشش کریں)۔ دوسرا، اشارے {X,} اور {X,Y} لالچی ہیں۔ وہ دیے گئے ریگولر ایکسپریشن کو مطمئن کرتے ہوئے زیادہ سے زیادہ حروف کو ملانے کی کوشش کریں گے۔ اگر آپ {3,7} بتاتے ہیں تو 3 سے 7 حروف کو ملایا جا سکتا ہے اور اگر اگلے 7 حروف درست ہیں تو تمام 7 حروف مل جائیں گے۔ اگر آپ {1,} کی وضاحت کرتے ہیں اور اگلے تمام 14,000 حروف مماثل ہیں، تو ان میں سے تمام 14,000 حروف متعلقہ سٹرنگ میں شامل ہوں گے۔ ہم اس علم کو اوپر اپنے اظہار کو دوبارہ لکھنے کے لیے کیسے استعمال کر سکتے ہیں؟ سب سے آسان بہتری پڑوسی گروپوں کو [a-z]اس کے ساتھ بدلنا ہو سکتی ہے [a-z]{N}، جہاں N کا انتخاب اسی کے مطابق کیا جاتا ہے:
پیٹرن: ([AZ][az]{2}[az]+)|([AZ][az]?[az]?)  
... لیکن اس سے چیزیں زیادہ بہتر نہیں ہوتی ہیں۔ پہلے کیپچر گروپ کو دیکھیں: ہمارے پاس [a-z]{2}(جو بالکل 2 چھوٹے حروف سے میل کھاتا ہے) اس کے بعد [a-z]+(جو 1 یا اس سے زیادہ چھوٹے حروف سے ملتا ہے)۔ ہم گھوبگھرالی منحنی خطوط وحدانی کا استعمال کرتے ہوئے 3 یا اس سے زیادہ چھوٹے حروف مانگ کر اسے آسان بنا سکتے ہیں:
پیٹرن: ([AZ][az]{3,})|([AZ][az]?[az]?) 
دوسرا کیپچر گروپ مختلف ہے۔ ہمیں ان آخری ناموں میں تین سے زیادہ حروف کی ضرورت نہیں ہے، جس کا مطلب ہے کہ ہمارے پاس اوپر کی حد ہے، لیکن ہماری نچلی حد صفر ہے:
پیٹرن: ([AZ][az]{3,})|([AZ][az]{0,2}) 
ریگولر ایکسپریشنز کا استعمال کرتے وقت مخصوصیت ہمیشہ بہتر ہوتی ہے، اس لیے وہاں رک جانا دانشمندی ہوگی، لیکن میں مدد نہیں کر سکتا لیکن یہ نوٹ نہیں کر سکتا کہ یہ دونوں کریکٹر رینجز ( [AZ]اور [az]) ایک دوسرے کے ساتھ لگ بھگ ایک "لفظ کے کریکٹر" کلاس کی طرح نظر آتے ہیں، \w( [A-Za-z0-9_]) . اگر ہمیں یقین تھا کہ ہمارے ڈیٹا میں صرف اچھے فارمیٹ شدہ آخری نام ہیں، تو ہم اپنے باقاعدہ اظہار کو آسان بنا سکتے ہیں اور آسانی سے لکھ سکتے ہیں:
پیٹرن: (\w{4,})|(\w{1,3}) 
پہلا گروپ 4 یا اس سے زیادہ "لفظی حروف" ( [A-Za-z0-9_]) کی کسی بھی ترتیب کو حاصل کرتا ہے اور دوسرا گروپ 1 سے 3 "لفظی حروف" (بشمول) کی کسی بھی ترتیب کو حاصل کرتا ہے۔ کیا یہ کام کرے گا؟
پیٹرن: (\w{4,})|(\w{1,3}) 
سٹرنگ:   Kim Jobs Xu Cloyd Mohr Ngo Rock ۔
مماثلتیں: ^^^ ^^^^ ^^^^^ ^^^^ ^^^^ ^^^^ 
گروپ:    222 1111 22 11111 1111 222 1111    
( مثال ) اس نے کام کیا! اس نقطہ نظر کے بارے میں کیا خیال ہے؟ اور یہ ہماری پچھلی مثال سے کہیں زیادہ صاف ہے۔ چونکہ پہلا کیپچر گروپ چار یا زیادہ حروف کے ساتھ تمام کنیتوں سے میل کھاتا ہے، اس لیے ہم دوسرے کیپچر گروپ کو صرف میں تبدیل کر سکتے ہیں \w+، کیونکہ اس سے ہمیں باقی تمام کنیتوں (1، 2، یا 3 حروف کے ساتھ):
پیٹرن: (\w{4,})|(\w+) 
سٹرنگ:   Kim Jobs Xu Cloyd Mohr Ngo Rock ۔
مماثلتیں: ^^^ ^^^^ ^^^^^ ^^^^ ^^^^ ^^^^ 
گروپ:    222 1111 22 11111 1111 222 1111    
( مثال )

آئیے یہ سیکھنے میں دماغ کی مدد کریں اور درج ذیل 2 مسائل کو حل کریں:

{}مرحلہ 7 سے سوشل سیکورٹی نمبر تلاش کرنے کے لیے ریگولر ایکسپریشن کو دوبارہ لکھنے کے لیے گھوبگھرالی منحنی خطوط وحدانی کا استعمال کریں :
پیٹرن:
سٹرنگ: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
میچز:              ^^^^^^^^^^^
( حل ) فرض کریں کہ کسی ویب سائٹ کے پاس ورڈ کی مضبوطی جانچنے والے کے لیے صارف کے پاس ورڈ کا 6 اور 12 حروف کے درمیان ہونا ضروری ہے۔ ایک ریگولر ایکسپریشن لکھیں جو نیچے دی گئی فہرست میں غلط پاس ورڈز کو جھنڈا دیتا ہے۔ ہر پاس ورڈ ()آسانی سے مماثلت کے لیے قوسین میں موجود ہے، اس لیے یقینی بنائیں کہ باقاعدہ اظہار لفظی (اور )علامتی حروف سے شروع اور ختم ہو۔ اشارہ: یقینی بنائیں کہ آپ پاس ورڈز میں لفظی قوسین کے ساتھ [^()]یا اس سے ملتی جلتی اجازت نہیں دیتے، بصورت دیگر آپ پوری تار سے مماثل ہو جائیں گے!
پیٹرن:
string:   (12345) (میرا پاس ورڈ) (Xanadu.2112) (su_do) (آف سیلز مین!)
میچز: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( حل )

مرحلہ 14: \bصفر چوڑائی بارڈر کا نشان

ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر اقدامات۔  حصہ 3 - 5آخری کام کافی مشکل تھا۔ ""لیکن کیا ہوگا اگر ہم قوسین کے بجائے اقتباسات میں پاس ورڈ بند کر کے اسے تھوڑا اور پیچیدہ بنا دیں ()؟ کیا ہم صرف قوسین کے تمام حروف کو اقتباس حروف سے بدل کر ایسا ہی حل لکھ سکتے ہیں؟
پیٹرن: \"[^"]{0.5}\"|\"[^"]+\s[^"]*\" 
سٹرنگ:   "12345" "میرا پاس ورڈ" "Xanadu.2112 " " su_do" " آف سیلز مین! "
میچز: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( مثال ) یہ زیادہ متاثر کن نہیں نکلا۔ کیا آپ نے پہلے ہی اندازہ لگایا ہے کہ کیوں؟ مسئلہ یہ ہے کہ ہم یہاں غلط پاس ورڈ تلاش کر رہے ہیں۔ "Xanadu.2112" ایک اچھا پاس ورڈ ہے، لہذا جب ریجیکس کو معلوم ہوتا ہے کہ اس ترتیب میں خالی جگہیں یا لغوی حروف شامل نہیں ہیں "، تو یہ اس کردار سے بالکل پہلے حاصل کرتا ہے "جو پاس ورڈ کو دائیں طرف کوالیفائی کرتا ہے۔ (کیونکہ ہم نے واضح کیا ہے کہ "پاس ورڈ کے اندر حروف کو استعمال کرتے ہوئے نہیں پایا جا سکتا [^"]۔) ایک بار جب ریگولر ایکسپریشن انجن مطمئن ہو جاتا ہے کہ وہ حروف کسی خاص ریگولر ایکسپریشن سے مماثل نہیں ہیں، تو یہ دوبارہ چلتا ہے، بالکل وہیں چلتا ہے جہاں سے چھوڑا گیا تھا - جہاں کردار تھا "۔ Xanadu.2112" دائیں طرف۔ وہاں سے وہ ایک خلائی کردار، اور دوسرا کردار دیکھتا ہے "- اس کے لیے یہ غلط پاس ورڈ ہے! بنیادی طور پر، وہ اس ترتیب کو تلاش کرتا ہے " "اور آگے بڑھتا ہے۔ یہ بالکل بھی نہیں ہے جو ہم حاصل کرنا چاہتے ہیں... یہ بہت اچھا ہوگا اگر ہم اس بات کی وضاحت کر سکیں کہ پاس ورڈ کا پہلا کریکٹر اسپیس نہیں ہونا چاہیے۔ کیا ایسا کرنے کا کوئی طریقہ ہے؟ (اب تک، آپ نے شاید یہ سمجھ لیا ہو گا کہ میرے تمام بیاناتی سوالات کا جواب "ہاں" ہے۔) جی ہاں! ایسا طریقہ ہے! بہت سے ریگولر ایکسپریشن انجن فرار کی ترتیب فراہم کرتے ہیں جیسے کہ "لفظ کی حد" \b۔ "لفظ کی حد" \bایک صفر چوڑائی فرار کی ترتیب ہے جو، عجیب بات ہے کہ، لفظ کی حد سے میل کھاتا ہے۔ یاد رکھیں کہ جب ہم "لفظ" کہتے ہیں تو ہمارا مطلب یا تو کلاس میں حروف کی کوئی ترتیب ہے \wیا [A-Za-z0-9_]۔ ایک لفظ کی باؤنڈری میچ کا مطلب ہے کہ ترتیب سے فوراً پہلے یا اس کے فوراً بعد ایک لفظ کا کردار \bہونا چاہیے ۔ неتاہم، مماثلت کے وقت، ہم اس کردار کو اپنے کیپچر شدہ سبسٹرنگ میں شامل نہیں کرتے ہیں۔ یہ صفر چوڑائی ہے۔ یہ دیکھنے کے لیے کہ یہ کیسے کام کرتا ہے، آئیے ایک چھوٹی سی مثال دیکھیں:
پیٹرن: \b[^ ]+\b 
string:   Ve still vant ze money , Lebowski .
میچز: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( مثال ) ترتیب کو [^ ]کسی ایسے حرف سے مماثل ہونا چاہیے جو لفظی خلائی حرف نہ ہو۔ ,تو یہ پیسے کے بعد والے کوما یا Lebowski کے بعد کی مدت سے کیوں میل نہیں کھاتا .؟ اس کی وجہ یہ ہے کہ کوما ,اور پیریڈ .لفظ کے حروف نہیں ہیں، اس لیے لفظ کے حروف اور غیر لفظی حروف کے درمیان حدود بن جاتی ہیں y۔ لفظ پیسہ اور اس کے بعد آنے والا کوما ,۔ اور " iلفظ Lebowski اور .اس کے بعد آنے والے مدت (فل اسٹاپ/پیریڈ) کے درمیان۔ باقاعدہ اظہار ان الفاظ کی حدود سے ملتا ہے (لیکن غیر لفظی حروف پر نہیں جو صرف ان کی وضاحت میں مدد کرتے ہیں)۔ \bلیکن اگر ہم اپنے سانچے میں مستقل مزاجی کو شامل نہ کریں تو کیا ہوگا ؟
پیٹرن: [^ ]+ 
string:   Ve still vant ze money، Lebowski. 
میچز: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( مثال ) جی ہاں، اب ہمیں یہ اوقاف کے نشانات بھی ملتے ہیں۔ آئیے اب حوالہ شدہ پاس ورڈز کے لیے ریجیکس کو ٹھیک کرنے کے لیے لفظ کی حدود کا استعمال کریں:
پیٹرن: \"\b[^"]{0.5}\b\"|\"\b[^"]+\s[^"]*\b\" 
string:   "12345" "میرا پاس ورڈ" " Xanadu. 2112" "su_do" "آف سیلز مین!"
میچز: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( مثال کے طور پر ) کوٹیشن مارکس ("\b ... \b") کے اندر الفاظ کی حدود رکھ کر، ہم مؤثر طریقے سے کہہ رہے ہیں کہ مماثل پاس ورڈ کے پہلے اور آخری حروف "لفظ کے حروف" ہونے چاہئیں۔ تو یہ یہاں ٹھیک کام کرتا ہے، لیکن ساتھ ساتھ کام نہیں کرے گا اگر صارف کے پاس ورڈ کا پہلا یا آخری حرف لفظ کا کردار نہیں ہے:
پیٹرن: \"\b[^"]{0.5}\b\"|\"\b[^"]+\s[^"]*\b\"
string: "followingpasswordistooshort" "C++"
میچز:   
( مثال ) دیکھیں کہ دوسرے پاس ورڈ کو "غلط" کے طور پر کیسے نشان زد نہیں کیا گیا حالانکہ یہ واضح طور پر بہت چھوٹا ہے۔ آپ کو ہونا چاہیے۔ہوشیارترتیب کے ساتھ \b، کیونکہ وہ صرف حروف کے درمیان حدود سے ملتے ہیں \wاور نہیں \w. مندرجہ بالا مثال میں، چونکہ ہم نے پاس ورڈز میں حروف کی اجازت نہیں دی ہے ، اس لیے پاس ورڈ کے پہلے/آخری حرف کے \wدرمیان کی حد لفظ کی حد ہونے کی ضمانت نہیں ہے ۔ \\b

اس مرحلے کو مکمل کرنے کے لیے، ہم صرف ایک سادہ مسئلہ حل کریں گے:

جب ہم حروف کی ایک مخصوص ترتیب سے مماثل ہونا چاہتے ہیں تو نحو کو نمایاں کرنے والے انجنوں میں الفاظ کی حدود کارآمد ہوتی ہیں، لیکن اس بات کو یقینی بنانا چاہتے ہیں کہ وہ صرف لفظ کے شروع یا آخر میں (یا خود ہی) ہوں۔ ہم کہتے ہیں کہ ہم نحو کو ہائی لائٹنگ لکھ رہے ہیں اور لفظ var کو ہائی لائٹ کرنا چاہتے ہیں، لیکن صرف اس صورت میں جب یہ خود ظاہر ہوتا ہے (لفظ کے دوسرے حروف کو چھوئے بغیر)۔ کیا آپ اس کے لیے باقاعدہ اظہار لکھ سکتے ہیں؟ یقیناً آپ کر سکتے ہیں، یہ بہت آسان کام ہے؛)
پیٹرن:
سٹرنگ:   var varx _var ( var j) barvarcar * var var -> { var }
میچز: ^^^ ^^^ ^^^ ^^^ ^^^  
( حل )

مرحلہ 15: "کیریٹ" ^بطور "لائن کی شروعات" اور ڈالر کا نشان $"لائن کے اختتام" کے طور پر

ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر اقدامات۔  حصہ 3 - 6لفظ باؤنڈری کی ترتیب \b(مضمون کے پچھلے حصے کے آخری مرحلے سے) صرف صفر چوڑائی کی واحد خصوصی ترتیب نہیں ہے جو باقاعدہ اظہار میں استعمال کے لیے دستیاب ہے۔ دو سب سے زیادہ مقبول ہیں "کیریٹ" ^- "لائن کا آغاز" اور ڈالر کا نشان $- "لائن کا اختتام"۔ آپ کے ریگولر ایکسپریشنز میں ان میں سے کسی ایک کو شامل کرنے کا مطلب یہ ہے کہ میچ سورس سٹرنگ کے شروع یا آخر میں ظاہر ہونا چاہیے:
پیٹرن   : ^ شروع _ _ 
_ _  
( مثال کے طور پر ) اگر آپ کے اسٹرنگ میں لائن بریکس ہے، تو یہ ^startکسی بھی لائن کے شروع میں ترتیب "شروع" سے مماثل ہوگا، اور end$کسی بھی لائن کے آخر میں ترتیب "اختتام" سے مماثل ہوگا (حالانکہ اسے یہاں دکھانا مشکل ہے)۔ یہ علامتیں خاص طور پر اس وقت مفید ہوتی ہیں جب اس ڈیٹا کے ساتھ کام کرتے ہیں جس میں حد بندی کرنے والے ہوتے ہیں۔ آئیے ^"لائن کی شروعات" کا استعمال کرتے ہوئے مرحلہ 9 سے "فائل سائز" کے مسئلے پر واپس جائیں۔ اس مثال میں، ہماری فائل کے سائز کو خالی جگہوں سے الگ کیا گیا ہے ۔ لہذا ہم چاہتے ہیں کہ ہر فائل کا سائز ایک نمبر کے ساتھ شروع ہو، اس سے پہلے اسپیس کریکٹر یا لائن کا آغاز ہو۔
پیٹرن: (^| )(\d+|\d+\.\d+)[KMGT]B سٹرنگ 
:   6.6KB 1..3KB 12KB 5G 3.3MB KB .6.2TB 9MB
میچز: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
گروپ:    222 122 1222 12    
( مثال ) ہم پہلے ہی مقصد کے بہت قریب ہیں! لیکن آپ محسوس کر سکتے ہیں کہ ہمارے پاس اب بھی ایک چھوٹا مسئلہ ہے: ہم درست فائل سائز سے پہلے اسپیس کریکٹر کو ملا رہے ہیں۔ اب ہم اس کیپچرنگ گروپ (1) کو اس وقت نظر انداز کر سکتے ہیں جب ہمارا ریگولر ایکسپریشن انجن اسے ڈھونڈتا ہے، یا ہم ایک نان کیپچرنگ گروپ استعمال کر سکتے ہیں، جسے ہم اگلے مرحلے میں دیکھیں گے۔

اس دوران، آئیے ٹون کے لیے مزید 2 مسائل حل کرتے ہیں:

آخری مرحلے سے ہماری نحو کو نمایاں کرنے والی مثال کے ساتھ جاری رکھتے ہوئے، کچھ نحو کو نمایاں کرنے سے پچھلی جگہوں کو نشان زد کیا جائے گا، یعنی کوئی بھی خالی جگہیں جو غیر وائٹ اسپیس کریکٹر اور لائن کے آخر کے درمیان آتی ہیں۔ کیا آپ صرف پچھلی جگہوں کو نمایاں کرنے کے لیے ریجیکس لکھ سکتے ہیں؟
پیٹرن:
string: myvec <- c(1, 2, 3, 4, 5)  
میچز:                          ^^^^^^^  
( حل ) ایک سادہ کوما سے الگ کردہ قدر (CSV) تجزیہ کار کوما سے الگ کیے گئے "ٹوکنز" کو تلاش کرے گا۔ عام طور پر، اسپیس کا کوئی مطلب نہیں ہوتا جب تک کہ اسے کوٹیشن مارکس میں بند نہ کیا جائے ""۔ ریگولر ایکسپریشن کو پارس کرتے ہوئے ایک سادہ سی ایس وی لکھیں جو کوما کے درمیان ٹوکنز سے میل کھاتا ہے، لیکن سفید جگہ کو نظر انداز کرتا ہے (کیپچر نہیں کرتا) جو اقتباسات کے درمیان نہیں ہے۔
پیٹرن:
اسٹرنگ:   a, "b", "c d", e,f, "g h", dfgi,, k, "", l 
مماثلتیں: ^^ ^^^^ ^^^^^^^^^^^^^ گروپ 
:    21 2221 2222212121 222221 222211 21 221 2    
( حل ) RegEx: ریگولر ایکسپریشنز میں مہارت حاصل کرنے کے لیے 20 مختصر مراحل۔ حصہ 4۔
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION