محمداحمد
لائبریرین
Verbose Regular Expression
Phone Number Validation والی پوسٹ میں ہمارے عبارتی نمونے (Text Pattern) کی حتمی شکل کچھ یوں ہو گئی تھی۔
PHP:
pattern = r'^\D*(\d{2,4})?\D*(\d{3,4})\D*(\d{3})\D*(\d{4})$'
اگر آپ نے حال ہی میں درج بالا تحریر پڑھی ہے تو یقیناً آپ کو اس عبارتی نمونے کو سمجھنے میں دشواری نہیں ہوگی اور آپ بتا سکیں گے کہ اس عبارتی نمونے میں کونسا ٹیکسٹ اور علامت کس بات کو جانچنے کے لئے استعمال ہو رہی ہے۔ تاہم اگر آپ اس عبارتی نمونے کو پھر سے چار چھ مہینے بعد دیکھیں گے تو یقیناً آپ اس عبارتی نمونے کو فوری طور پر سمجھنے سے قاصر ہوں گے۔ کیونکہ اس میں سب کچھ ایک ساتھ ہی لکھا ہے اور کہیں کسی چیز کی وضاحت موجود نہیں ہے۔ اس طرح کی ریگولر ایکسپریشن کو گنجان (Compact Expression) کہتے ہیں۔ آپ اسے ایک چست بندش بھی کہہ سکتے ہیں۔
اس کے برعکس پائتھون ریگولر ایکسپریشن کی ایک قسم Verbose Expresson بھی ہوتی ہے جو ہمیں اس بات کی اجازت دیتی ہے کہ ہم اپنے عبارتی نمونے میں تبصرہ جات کی مدد سے وضاحتیں (یادداشت) تحریر کر لیں۔ اس طرح ہم جب بھی اس ایکسپریشن کو دیکھیں گے تبصرہ جات میں موجود یہ وضاحتیں (یادداشت) ہمیں عبارتی نمونے کو سمجھنے میں مدد دیں گی۔
Compact Expression کے برخلاف Verbose Expression میں اسپیس (White Spaces) کو نظر انداز کر دیا جاتا ہے۔ Tabs, Spaces اور Carriage Return بھی بطور Tabs, Spaces اور Carriage Return شناخت نہیں کیے جاتے۔ Verbose Expression میں اگر آپ اپنے عبارتی نمونے میں space دینا چاہیں تو آپ کو Escape Character یعنی backslash (\) کی مدد سے اُسے escape کرانا ہوگا۔
Verbose Expression میں تبصرہ جات نظر انداز کر دیے جاتے ہیں۔ بالکل ایسے ہی جیسے عام پائتھون کوڈ میں تبصرہ جات نہیں پڑھے جاتے۔ اگر Verbose Expression میں سے تبصرہ جات، Tabs, Spaces اور Carriage Return وغیرہ نکال دیئے جائیں تو یہ بعینہ ویسا ہی ایکسپریشن ہو جائے گا جیسا کہ Compact Expression ہوتا ہے۔
اوپر دیئے گئے ایکسپریشن کو اگر ہم Verbose Expression میں لکھیں تو وہ کچھ اس طرح کا لگے گا۔
PHP:
pattern = '''
^ # beginning of the string
\D* # + Sign etc. - Non-digit charter - zero or more occurence.
(\d{2,4})? # Country Code - digits minimum 2 and maximum 4 - ? depicts Optional Group
\D* # Non-digit charter for expected Space or dash etc. - zero or more occurence.
(\d{3,4}) # 3 to 4 digits.
\D* # Non-digit charter for expected Space or dash etc. - zero or more occurence.
(\d{3}) # Exactly 3 digits.
\D* # Non-digit charter for expected Space or dash etc. - zero or more occurence.
(\d{4}) # Exactly 4 digits.
$ # end of the string.
'''
اس طرح ہمیں پیٹرن کے ہر ہر حصے کےبارے میں تفصیل / وضاحت میسر آجاتی ہے۔ اور ہم جب بھی اسے دیکھیں یہ ہمارے لئے عام فہم ہی رہتا ہے۔
اسے آزما کر بھی دیکھ لیتے ہیں۔
PHP:
>>> phone1 = '0333-333-3333'
>>> result = re.search(pattern, phone1,re.VERBOSE)
>>> if(result):
print ("Format matched")
else:
print ("No match found")
Format matched
>>>
یہاں ہم نے اپنے عبارتی نمونے (Verbose Expression) کی مدد سے phone1 کی پڑتال کی ہے اور اسے مطلوبہ عبارتی نمونے کے مطابق پایا ہے۔
یہاں شاید آپ نے ایک نئی چیز پر غور کیا ہو۔ یعنی re.VERBOSE۔
ہم جب جب Verbose Expression استعمال کرتے ہیں تو ہمیں انٹرپریٹر کو یہ بتانا پڑتا ہے کہ یہاں Verbose Expression استعمال کیا گیا ہے۔ یعنی اس ایکسپریشن میں اسپیس، ٹیب، کیرج ریٹرن اور تبصرہ جات کو نظر انداز کر دیا جائے۔ انٹرپریٹر کو یہ بات سمجھانے کے لئے ہم درج ذیل اضافی دلیل (Extra Argument) استعمال کرتے ہیں۔
re.VERBOSE
ہم دیکھ سکتے ہیں کہ Verbose Expression کی مدد سے ہمارا عبارتی نمونہ اب زیادہ قابلِ فہم (Readable) ہو گیا ہے۔