ریجیکس ٹیسٹر: اپنے ٹیکسٹ کے خلاف پیٹرن بنائیں اور ڈیبگ کریں
ایک ریگولر ایکسپریشن ٹیکسٹ کی شکل بیان کرنے کے لیے ایک چھوٹی زبان ہے۔ "کیا یہ عین یہی لفظ یہاں ہے؟" پوچھنے کی بجائے، ریجیکس آپ کو یہ پوچھنے دیتا ہے "کیا یہاں کوئی ایسی اسٹرنگ ہے جو ایسی نظر آتی ہو؟" یہی چیز اسے کوڈ ایڈیٹرز، لاگ فائلوں، فارم ان پٹس، اور اسکرپٹس میں ٹیکسٹ تلاش کرنے، تصدیق کرنے، نکالنے اور بدلنے کے لیے طاقتور بناتی ہے۔ یہی چیز اسے غلط سمجھنا بھی آسان بناتی ہے، کیونکہ ایک پیٹرن جو آپ کے ذہن میں ٹھیک لگتا ہو خاموشی سے بہت زیادہ، بہت کم، یا کچھ بھی مماثل نہیں کر سکتا۔
یہی وجہ ہے کہ انٹرایکٹو طور پر ٹیسٹ کرنا اندازہ لگانے سے بہتر ہے۔ جب آپ ایک پیٹرن ٹائپ کرتے ہیں اور اصل نمونہ ٹیکسٹ میں میچز کو روشن ہوتے دیکھتے ہیں، تو آپ کو فوری فیڈ بیک ملتا ہے: آپ دیکھتے ہیں کہ کیا پکڑا گیا، کیا نکل گیا، اور کون سے کیپچر گروپ نے کون سا ٹکڑا پکڑا۔ ہمارا ریجیکس ٹیسٹر مکمل طور پر آپ کے براؤزر میں چلتا ہے۔ آپ کا پیٹرن اور آپ کا نمونہ ٹیکسٹ کبھی صفحے سے باہر نہیں جاتے، اس لیے آپ لاگ لائنیں، ای میلز، یا پروڈکشن ڈیٹا بغیر کسی سرور کو کچھ بھی بھیجے پیسٹ کر سکتے ہیں۔

وہ بنیادی اجزاء جن سے واقفیت ضروری ہے
زیادہ تر روزمرہ پیٹرنز چند بنیادی ٹکڑوں سے جوڑے جاتے ہیں۔ انہیں سیکھ لیں اور آپ اپنے سامنے آنے والے زیادہ تر ریجیکسز پڑھ سکیں گے۔
کریکٹر کلاسز اجازت یافتہ حروف کا ایک مجموعہ بیان کرتی ہیں۔ [aeiou] کسی بھی ایک حرکت کو مماثل کرتا ہے، [0-9] ایک ہندسے کو، اور [a-zA-Z] ایک حرف کو۔ بریکٹس کے اندر ایک کیریٹ سیٹ کو منفی کر دیتا ہے، اس لیے [^0-9] کا مطلب ہے "کوئی بھی حرف جو ہندسہ نہ ہو۔" مختصرات ٹائپنگ بچاتے ہیں: \d ایک ہندسہ ہے، \w ایک ورڈ کریکٹر ہے (حروف، ہندسے، انڈر اسکور)، \s خالی جگہ ہے، اور نقطہ . تقریباً کسی بھی ایک حرف کو مماثل کرتا ہے۔
کوانٹیفائرز بتاتے ہیں کہ پچھلا ٹکڑا کتنی بار دہرایا جا سکتا ہے۔ * کا مطلب صفر یا زیادہ، + کا مطلب ایک یا زیادہ، اور ? کا مطلب صفر یا ایک (اختیاری)۔ عین تعداد کے لیے، {3} کا مطلب عین تین اور {2,4} کا مطلب دو سے چار۔ چنانچہ \d{4} ایک چار ہندسوں والے سال کو مماثل کرتا ہے اور colou?r دونوں املا کو مماثل کرتا ہے۔
اینکرز ایک پیٹرن کو حرف کی بجائے پوزیشن سے جوڑتے ہیں۔ ^ ٹیکسٹ کے آغاز کو مماثل کرتا ہے، $ اختتام کو، اور \b ایک ورڈ باؤنڈری کی نشاندہی کرتا ہے۔ پیٹرن ^Error صرف ان لائنوں کو مماثل کرتا ہے جو "Error" سے شروع ہوتی ہیں، جو عین وہی ہے جو آپ لاگز اسکین کرتے وقت چاہتے ہیں۔
گروپس پیٹرن کے کسی حصے کو قوسین میں لپیٹتے ہیں، دونوں مقاصد کے لیے: کئی حروف پر بیک وقت ایک کوانٹیفائر لگانا اور دوبارہ استعمال کے لیے مماثل ٹیکسٹ کو کیپچر کرنا۔ (\d{4})-(\d{2})-(\d{2}) میں ہر گروپ ایک تاریخ کا جزو کیپچر کرتا ہے جسے آپ بعد میں نکال سکتے ہیں۔ پائپ کے ساتھ الٹرنیشن "یا" کی طرح کام کرتی ہے: cat|dog|fish ان تینوں الفاظ میں سے کسی ایک کو مماثل کرتا ہے۔
وہ پیٹرنز جو آپ واقعی استعمال کریں گے
چند بار بار پیش آنے والے کام زیادہ تر حقیقی کام کا احاطہ کرتے ہیں۔ کسی چیز کو ای میل جیسی پکڑنے کے لیے، [\w.+-]+@[\w-]+\.[\w.-]+ ایک عملی نقطہ آغاز ہے؛ باضابطہ وضاحت کے مطابق مکمل ای میل تصدیق مشہور طور پر پیچیدہ ہے، اور صارفین کو مسترد کرنے کی بجائے امیدواروں کو اجاگر کرنے کے لیے ایک ڈھیلا پیٹرن عام طور پر درست انتخاب ہے۔
نمبروں کے لیے، \d+ ہندسوں کی قطاریں پکڑتا ہے، جبکہ -?\d+(\.\d+)? اختیاری منفی اور اعشاریوں کو مماثل کرتا ہے۔ شروع اور آخری خالی جگہ کاٹنے کے لیے، ^\s+|\s+$ کو مماثل کریں اور اسے کچھ بھی نہ کہ کے ساتھ بدل دیں۔ نقل شدہ الفاظ ڈھونڈنے کے لیے، بیک ریفرنس پیٹرن \b(\w+)\s+\1\b ایک لفظ کو اس کے بعد خود اسی لفظ سے مماثل کرتا ہے، جہاں \1 پہلے کیپچر کیے گئے گروپ کی طرف اشارہ کرتا ہے۔

فلیگز میچنگ کے طریقے کو بدل دیتے ہیں
فلیگز وہ سوئچز ہیں جو پورے پیٹرن کو تبدیل کرتے ہیں۔ گلوبل فلیگ (g) پہلے میچ پر رکنے کی بجائے ہر میچ ڈھونڈتا ہے، جو وہی ہے جو آپ چاہتے ہیں جب تمام موجودگیوں کو ہائی لائٹ کر رہے ہوں۔ کیس غیر حساس فلیگ (i) error کو "Error" اور "ERROR" دونوں سے یکساں طور پر مماثل بناتا ہے۔ ملٹی لائن فلیگ (m) ^ اور $ کو یوں بدل دیتا ہے کہ وہ پورے ٹیکسٹ کی بجائے ہر لائن کے آغاز اور اختتام پر مماثل ہوں، جو لائن بہ لائن لاگ کام کے لیے لازمی ہے۔ دیگر مفید فلیگز میں s (ڈاٹ آل، جو نقطے کو نئی لائنز سے بھی مماثل ہونے دیتا ہے) اور مکمل یونیکوڈ ہینڈلنگ کے لیے u شامل ہیں۔
مختلف زبانوں میں معمولی فرق
ریجیکس ایک ہی مقررہ معیار نہیں بلکہ لہجوں کا ایک خاندان ہے۔ JavaScript، Python، PCRE (PHP)، Java، .NET، Go، اور Rust اوپر دیے گئے بنیادی نحو پر متفق ہیں، مگر وہ کناروں پر مختلف ہو جاتے ہیں: لُک بی ہائنڈ سپورٹ، نامزد گروپ کا نحو ((?<name>...) بمقابلہ (?P<name>...))، یونیکوڈ خصوصیت کے ایسکیپس، اور کون سے فلیگز موجود ہیں سب مختلف ہوتے ہیں۔ ایک پیٹرن جو ایک انجن میں کام کرتا ہو دوسرے میں تھوڑی سی تبدیلی کا تقاضا کر سکتا ہے، اس لیے اُس لہجے کے خلاف ٹیسٹ کرنا مفید ہے جس کے ساتھ آپ واقعی بھیجتے ہیں۔ جب آپ کا پیٹرن ٹھیک ہو جائے، ہمارے دیگر ڈویلپر ٹولز اور ٹیکسٹ ٹولز اس ڈیٹا کو صاف کرنے، انکوڈ کرنے اور تبدیل کرنے کے اردگرد کے کام میں مدد کر سکتے ہیں جو آپ نے ابھی مماثل کیا ہے۔
اکثر پوچھے جانے والے سوالات
کیا میرا ٹیکسٹ کسی سرور کو بھیجا جاتا ہے؟
نہیں۔ ریجیکس ٹیسٹر مکمل طور پر آپ کے براؤزر میں چلتا ہے۔ آپ کا پیٹرن اور نمونہ ٹیکسٹ آپ کے آلے پر ہی رہتے ہیں اور کبھی اپلوڈ نہیں ہوتے، اس لیے حساس ڈیٹا پیسٹ کرنا محفوظ ہے۔
یہ ٹول کون سا ریجیکس لہجہ استعمال کرتا ہے؟
یہ آپ کے براؤزر میں بنا ہوا JavaScript ریجیکس انجن استعمال کرتا ہے۔ بنیادی نحو زیادہ تر زبانوں سے آپ کی واقفیت سے مماثل ہے، اگرچہ کچھ اعلیٰ خصوصیات PCRE، Python، یا .NET سے تھوڑی مختلف ہیں۔
گریڈی اور لیزی میچنگ میں کیا فرق ہے؟
بطور ڈیفالٹ کوانٹیفائرز گریڈی ہوتے ہیں اور جتنا ممکن ہو ٹیکسٹ پکڑ لیتے ہیں۔ ایک سوالیہ نشان شامل کرنا انہیں لیزی بنا دیتا ہے، تاکہ وہ کم سے کم پکڑیں۔ مثال کے طور پر، نقطہ ستارہ پیٹرن گریڈی ہوتا ہے جبکہ نقطہ ستارہ سوالیہ نشان لیزی ہوتا ہے۔
میں ایک لفظی خاص حرف کو کیسے مماثل کروں؟
اسے بیک سلیش سے ایسکیپ کریں۔ ایک حقیقی نقطہ مماثل کرنے کے لیے، بیک سلیش نقطہ لکھیں۔ یہی اصول دیگر میٹا حروف جیسے قوسین، بریکٹس، پلس کی علامت، اور سوالیہ نشان پر لاگو ہوتا ہے۔
میرا پیٹرن کچھ بھی کیوں مماثل نہیں کرتا؟
عام وجوہات میں غائب گلوبل فلیگ، ایسے اینکرز جو میچ کو غلط پوزیشن پر جوڑ دیں، ایک غیر ایسکیپڈ خاص حرف، یا گریڈی کوانٹیفائرز جو آپ کی متوقع حد سے آگے نکل جائیں شامل ہیں۔ مجرم تلاش کرنے کے لیے ٹکڑا بہ ٹکڑا ٹیسٹ کریں۔
کیا میں میچ کے حصے کیپچر کر سکتا ہوں؟
جی ہاں۔ پیٹرن کے کسی حصے کو قوسین میں لپیٹ کر ایک کیپچر گروپ بنائیں۔ ہر گروپ الگ سے رپورٹ ہوتا ہے، جو آپ کو کسی تاریخ سے سال، مہینہ اور دن جیسی فیلڈز نکالنے دیتا ہے۔
