JavaRush /جاوا بلاگ /Random-UR /جاوا میں باقاعدہ اظہار، حصہ 2

جاوا میں باقاعدہ اظہار، حصہ 2

گروپ میں شائع ہوا۔
ہم آپ کی توجہ کے لیے جاوا میں ریگولر ایکسپریشنز کے لیے ایک مختصر گائیڈ کا ترجمہ پیش کرتے ہیں، جو javaworld ویب سائٹ کے لیے Jeff Friesen نے لکھا ہے ۔ پڑھنے میں آسانی کے لیے ہم نے مضمون کو کئی حصوں میں تقسیم کیا ہے۔ جاوا میں باقاعدہ اظہار، حصہ 2 - 1جاوا میں باقاعدہ اظہار، حصہ 1
متعدد رینجز کو ضم کرنا
آپ متعدد رینجز کو ایک دوسرے کے ساتھ رکھ کر ایک رینج کریکٹر کلاس میں ضم کر سکتے ہیں۔ مثال کے طور پر، کلاس [a-zA-Z]لوئر یا اپر کیس میں تمام لاطینی حروف تہجی کے حروف سے میل کھاتی ہے۔

متعدد رینجز کو ضم کرنا

آپ متعدد رینجز کو ایک دوسرے کے ساتھ رکھ کر ایک رینج کریکٹر کلاس میں ضم کر سکتے ہیں۔ مثال کے طور پر، کلاس [a-zA-Z]لوئر یا اپر کیس میں تمام لاطینی حروف تہجی کے حروف سے میل کھاتی ہے۔

کریکٹر کلاسز کا امتزاج

کریکٹر کلاس یونین کئی نیسٹڈ کریکٹر کلاسز پر مشتمل ہوتی ہے اور نتیجے میں آنے والی یونین کے تمام حروف سے میل کھاتی ہے۔ مثال کے طور پر، کلاس سے سے اور سے تک [a-d[m-p]]کے حروف سے میل کھاتا ہے ۔ مندرجہ ذیل مثال پر غور کریں: یہ مثال حروف تلاش کرے گی , , , اور , جس کے لیے مماثلتیں ہیں : admpjava RegexDemo [ab[c-e]] abcdefabcdeabcdef
regex = [ab[c-e]]
input = abcdef
Found [a] starting at 0 and ending at 0
Found [b] starting at 1 and ending at 1
Found [c] starting at 2 and ending at 2
Found [d] starting at 3 and ending at 3
Found [e] starting at 4 and ending at 4

کریکٹر کلاس انٹرسیکشن

کریکٹر کلاسز کا انٹرسیکشن ان حروف پر مشتمل ہوتا ہے جو تمام نیسٹڈ کلاسوں میں مشترک ہوتے ہیں اور صرف عام حروف سے میل کھاتے ہیں۔ مثال کے طور پر، کلاس [a-z&&[d-f]]حروف سے مماثل ہے d، eاور f. مندرجہ ذیل مثال پر غور کریں: java RegexDemo "[aeiouy&&[y]]" party نوٹ کریں کہ میرے ونڈوز آپریٹنگ سسٹم پر، ڈبل کوٹس کی ضرورت ہے کیونکہ کمانڈ شیل ان کو &کمانڈ سیپریٹر کے طور پر دیکھتا ہے۔ اس مثال میں صرف وہی کردار ملے گا yجس میں مماثلت ہے party:
regex = [aeiouy&&[y]]
input = party
Found [y] starting at 4 and ending at 4

کریکٹر کلاسز کو گھٹانا

کریکٹر کلاسز کو گھٹانے میں تمام حروف شامل ہوتے ہیں سوائے ان کے جو نیسٹڈ کریکٹر کلاسز میں شامل ہیں، اور صرف ان باقی حروف سے میل کھاتا ہے۔ مثال کے طور پر، کلاس سے to اور from to [a-z&&[^m-p]]کے حروف سے مماثل ہے : یہ مثال حروف تلاش کرے گی اور جن کے لیے : alqzjava RegexDemo "[a-f&&[^a-c]&&[^e]]" abcdefgdfabcdefg
regex = [a-f&&[^a-c]&&[^e]]
input = abcdefg
Found [d] starting at 3 and ending at 3
Found [f] starting at 5 and ending at 5

پہلے سے طے شدہ کریکٹر کلاسز

شارٹ ہینڈ اشارے کے استعمال کا جواز پیش کرنے کے لیے کچھ کریکٹر کلاسز باقاعدہ اظہار میں کافی کثرت سے ظاہر ہوتے ہیں ۔ کلاس Patternاس طرح کے مخفف کے طور پر پہلے سے طے شدہ کریکٹر کلاسز پیش کرتی ہے۔ آپ انہیں اپنے ریگولر ایکسپریشنز کو آسان بنانے اور نحوی غلطیوں کو کم کرنے کے لیے استعمال کر سکتے ہیں۔ پہلے سے طے شدہ کریکٹر کلاسز کی کئی قسمیں ہیں: معیاری، POSIX، java.lang.Characterاور یونیکوڈ خصوصیات جیسے اسکرپٹ، بلاک، زمرہ، اور بائنری۔ مندرجہ ذیل فہرست صرف معیاری کلاسوں کے زمرے کو ظاہر کرتی ہے:
  • \d: نمبر۔ مساوی [0-9]_
  • \D: غیر عددی حرف۔ مساوی [^0-9]_
  • \s: وائٹ اسپیس کریکٹر۔ مساوی [ \t\n\x0B\f\r]_
  • \S: وائٹ اسپیس کریکٹر نہیں ہے۔ مساوی [^\s]_
  • \w: لفظ بنانے کی علامت۔ مساوی [a-zA-Z_0-9]_
  • \W: لفظ بنانے والا کردار نہیں۔ مساوی [^\w]_
درج ذیل مثال \wان پٹ ٹیکسٹ میں تمام الفاظ کے حروف کو بیان کرنے کے لیے پہلے سے طے شدہ کریکٹر کلاس کا استعمال کرتی ہے: java RegexDemo \w "aZ.8 _" درج ذیل ایگزیکیوشن کے نتائج کو قریب سے دیکھیں، جو یہ ظاہر کرتے ہیں کہ دورانیہ اور اسپیس حروف کو لفظ کے حروف نہیں سمجھا جاتا ہے۔
regex = \w
input = aZ.8 _
Found [a] starting at 0 and ending at 0
Found [Z] starting at 1 and ending at 1
Found [8] starting at 3 and ending at 3
Found [_] starting at 5 and ending at 5
لائن الگ کرنے والے
کلاس SDK دستاویزات ڈاٹ Patternمیٹا کریکٹر کو پہلے سے طے شدہ کریکٹر کلاس کے طور پر بیان کرتی ہے جو لائن الگ کرنے والوں کے علاوہ کسی بھی کریکٹر سے میل کھاتا ہے (ایک یا دو حروف کی ترتیب جو لائن کے اختتام کو نشان زد کرتی ہے)۔ مستثنیٰ ڈاٹال موڈ ہے (جس پر ہم آگے بات کریں گے)، جس میں نقطے بھی لائن الگ کرنے والوں سے ملتے ہیں۔ کلاس Patternدرج ذیل لائن الگ کرنے والوں کو ممتاز کرتی ہے:
  • گاڑی کی واپسی کا کردار ( \r)
  • نیو لائن کریکٹر (کاغذ کی ایک لائن کو آگے بڑھانے کی علامت) ( \n
  • کیریج کی واپسی کا کریکٹر فوری طور پر اس کے بعد ایک نئی لائن کریکٹر ( \r\n)
  • اگلی لائن کا کردار ( \u0085)
  • لائن الگ کرنے والا کردار ( \u2028)
  • پیراگراف الگ کرنے والی علامت ( \u2029)

پکڑے گئے گروہ

کیپچرنگ گروپ کو پیٹرن کے ذریعے تلاش کرتے وقت مزید استعمال کے لیے حروف کے پائے گئے سیٹ کو محفوظ کرنے کے لیے استعمال کیا جاتا ہے۔ ( )یہ تعمیر قوسین ( ) کے ذریعے میٹا کریکٹرز میں بند حروف کا ایک سلسلہ ہے ۔ پیٹرن کے لحاظ سے تلاش کرتے وقت کیپچر گروپ کے اندر تمام حروف کو ایک مکمل سمجھا جاتا ہے۔ مثال کے طور پر ، کیپچر گروپ ( Java) حروف کو یکجا کرتا ہے J، aاور ایک اکائی میں۔ یہ کیپچر گروپ ان پٹ ٹیکسٹ میں پیٹرن کے تمام واقعات تلاش کرتا ہے ۔ ہر میچ کے ساتھ، پچھلے ذخیرہ شدہ حروف کو اگلے حروف سے بدل دیا جاتا ہے۔ پکڑے گئے گروپوں کو دوسرے پکڑے گئے گروپوں کے اندر اندر بنایا جا سکتا ہے۔ مثال کے طور پر، ایک ریگولر ایکسپریشن میں، ایک گروپ کو گروپ کے اندر اندر بنایا جاتا ہے ۔ ہر نیسٹڈ یا غیر نیسٹڈ کیپچر گروپ کو ایک نمبر تفویض کیا جاتا ہے، جو 1 سے شروع ہوتا ہے، اور نمبرنگ بائیں سے دائیں تک جاتی ہے۔ پچھلی مثال میں، کیپچر گروپ نمبر 1 اور کیپچر گروپ نمبر 2 سے مماثلتیں۔ ریگولر ایکسپریشن میں ، کیپچر گروپ نمبر 1 اور کیپچر گروپ نمبر 2 سے مماثلتیں ۔ کیپچر گروپس کے ذریعے اسٹور کردہ میچوں کو بعد میں بیک حوالہ جات استعمال کرکے رسائی حاصل کی جاسکتی ہے۔ بیک سلیش کیریکٹر کے طور پر مخصوص کیا گیا ہے جس کے بعد ایک عددی کریکٹر کیپچر کیے جانے والے گروپ کی تعداد سے مطابقت رکھتا ہے، بیک ریفرنس آپ کو گروپ کے ذریعے کیپچر کیے گئے متن میں حروف کا حوالہ دینے کی اجازت دیتا ہے۔ بیک لنک ہونے کی وجہ سے میچر پکڑے گئے گروپ کے ذخیرہ شدہ تلاش کے نتائج کو اس کے نمبر کی بنیاد پر حوالہ دیتا ہے، اور پھر مزید تلاش کی کوشش کرنے کے لیے اس نتیجے کے حروف کا استعمال کرتا ہے۔ مندرجہ ذیل مثال متن میں گرائمر کی غلطیوں کو تلاش کرنے کے لیے بیک ریفرنس کا استعمال دکھاتی ہے: یہ مثال ان پٹ ٹیکسٹ میں فوراً بعد ایک ڈپلیکیٹ لفظ کے ساتھ گرائمر کی غلطی کو تلاش کرنے کے لیے ایک ریگولر ایکسپریشن کا استعمال کرتی ہے ۔ یہ ریگولر ایکسپریشن پکڑنے کے لیے دو گروپوں کی وضاحت کرتا ہے: نمبر 1 – , اس کے مطابق اور نمبر 2 – ، اس کے بعد اسپیس کریکٹر کے مطابق ۔ بیک ریفرنس گروپ نمبر 2 کے ذخیرہ شدہ نتیجہ کو دوبارہ دیکھنے کی اجازت دیتا ہے تاکہ میچر کسی اسپیس کی دوسری موجودگی کو تلاش کر سکے ، اس کے بعد اسپیس کی پہلی موجودگی کے فوراً بعد اور ۔ میچر کے نتائج درج ذیل ہیں: vaJavaJava(Java( language))(language)(Java)(Java( language))(language)(a)(b)(a)(b)جاوا میں باقاعدہ اظہار، حصہ 2 - 2java RegexDemo "(Java( language)\2)" "The Java language language"(Java( language)\2)languageJava"The Java language language"(Java( language)\2)Java language language(language)language\2languagelanguageRegexDemo
regex = (Java( language)\2)
input = The Java language language
Found [Java language language] starting at 4 and ending at 25

باؤنڈری میچرز

بعض اوقات آپ کو لائن کے شروع میں، لفظ کی حدود میں، متن کے آخر میں، وغیرہ پر پیٹرن میچ کرنے کی ضرورت ہوتی ہے۔ آپ کلاس ایج میچرز میں سے کسی ایک کا استعمال کر کے ایسا کر سکتے ہیں Pattern، جو کہ ریگولر ایکسپریشن کنسٹرکٹس ہیں جو درج ذیل جگہوں پر مماثلتیں تلاش کرتے ہیں۔
  • ^: لائن کا آغاز
  • $: لائن کا اختتام
  • \b: لفظ کی حد
  • \B: سیوڈو ورڈ کی حد
  • \A: متن کا آغاز
  • \G: پچھلے میچ کا اختتام؛
  • \Z: متن کا اختتام، ٹریلنگ لائن الگ کرنے والے کو چھوڑ کر (اگر موجود ہو)؛
  • \z: متن کا اختتام
مندرجہ ذیل مثال ^باؤنڈری میچر میٹا کریکٹر کا استعمال کرتے ہوئے لائنوں کو تلاش کرنے کے لیے استعمال کرتی ہے جو کہ سے شروع ہوتی ہے The، اس کے بعد صفر یا زیادہ الفاظ کے حروف ہوتے ہیں: java RegexDemo "^The\w*" Therefore کریکٹر ^اس بات کی وضاحت کرتا ہے کہ ان پٹ ٹیکسٹ کے پہلے تین حروف کو لگاتار پیٹرن کے حروف سے مماثل ہونا چاہیے T، hاور e، جس کے بعد کوئی بھی نمبر ہو سکتا ہے۔ لفظ تشکیل دینے والی علامتوں کا۔ یہاں عملدرآمد کا نتیجہ ہے:
regex = ^The\w*
input = Therefore
Found [Therefore] starting at 0 and ending at 8
اگر آپ کمانڈ لائن کو تبدیل کرتے ہیں تو کیا ہوگا java RegexDemo "^The\w*" " Therefore"؟ کوئی مماثلت نہیں ملے گی کیونکہ Thereforeان پٹ ٹیکسٹ اسپیس کریکٹر سے پہلے ہوتا ہے۔

زیرو لینتھ میچز

بعض اوقات، ایج میچرز کے ساتھ کام کرتے وقت، آپ کو زیرو لینتھ میچز کا سامنا کرنا پڑے گا۔ Совпадение нулевой длиныایک ایسا میچ ہے جس میں کوئی حرف نہیں ہوتا ہے۔ وہ خالی ان پٹ ٹیکسٹ میں، ان پٹ ٹیکسٹ کے شروع میں، ان پٹ ٹیکسٹ کے آخری کریکٹر کے بعد، اور ان پٹ ٹیکسٹ کے کسی بھی دو حروف کے درمیان ہو سکتے ہیں۔ زیرو لینتھ میچز کو پہچاننا آسان ہے کیونکہ وہ ہمیشہ ایک ہی پوزیشن پر شروع اور ختم ہوتے ہیں۔ مندرجہ ذیل مثال پر غور کریں: java RegExDemo \b\b "Java is" یہ مثال دو متواتر الفاظ کی حدود کو تلاش کرتی ہے، اور نتائج اس طرح نظر آتے ہیں:
regex = \b\b
input = Java is
Found [] starting at 0 and ending at -1
Found [] starting at 4 and ending at 3
Found [] starting at 5 and ending at 4
Found [] starting at 7 and ending at 6
ہم نتائج میں صفر کی لمبائی کے کئی میچ دیکھتے ہیں۔ یہاں ختم ہونے والی پوزیشنیں ابتدائی پوزیشنوں سے ایک کم ہیں، کیونکہ RegexDemoمیں نے فہرست 1 میں سورس کوڈ میں وضاحت کی ہے end() – 1۔ جاوا میں باقاعدہ اظہار، حصہ 2 - 3

کوانٹیفائرز

کوانٹیفائر ایک ریگولر ایکسپریشن کنسٹرکٹ ہے جو واضح طور پر یا واضح طور پر ایک پیٹرن کو عددی قدر کے ساتھ جوڑتا ہے۔ یہ عددی قدر طے کرتی ہے کہ پیٹرن کو کتنی بار تلاش کرنا ہے۔ کوانٹیفائر کو لالچی، سست اور انتہائی لالچی میں تقسیم کیا گیا ہے:
  • لالچی کوانٹیفائر ( ?، *یا +) سب سے طویل میچ تلاش کرنے کے لیے ڈیزائن کیا گیا ہے۔ کیا میں پوچھ سکتا ہے X؟ ایک یا کم واقعات کو تلاش کرنے کے لیے X، X*صفر یا زیادہ واقعات کو تلاش کرنے کے لیے X، X+ایک یا زیادہ واقعات کو تلاش کرنے کے لیے X، واقعات کو X{n}تلاش کرنے کے لیے ، کم از کم (اور ممکنہ طور پر زیادہ) واقعات کو تلاش کرنے کے لیے، اور کم از کم لیکن زیادہ واقعات کو تلاش کرنے کے لیے ۔nXX{n,}nXX{n,m}nmX
  • سست کوانٹیفائر ( ??، *?یا +?) کو مختصر ترین میچ تلاش کرنے کے لیے ڈیزائن کیا گیا ہے۔ آپ X??, X? X*_ صفر یا زیادہ وقوعات کو تلاش کرنے کے لیے X، X+?ایک یا زیادہ واقعات کو تلاش کرنے کے لیے X، واقعات کو X{n}?تلاش کرنے کے لیے ، کم از کم (اور ممکنہ طور پر زیادہ) واقعات کو تلاش کرنے کے لیے ، اور کم از کم تلاش کرنے کے لیے لیکن واقعات سے زیادہ نہیں ۔nXX{n,}?nXX{n,m}?nmX
  • انتہائی لالچی کوانٹیفائر ( ?+، *+یا ++) لالچی کوانٹیفائر سے ملتا جلتا ہے، سوائے اس کے کہ انتہائی لالچی کوانٹیفائر صرف ایک کوشش کرتا ہے کہ وہ سب سے طویل میچ تلاش کرے، جبکہ لالچی کوانٹیفائر متعدد کوششیں کر سکتا ہے۔ X?+ایک یا کم واقعات کو تلاش کرنے کے لیے X، X*+صفر یا زیادہ واقعات کو تلاش کرنے کے لیے X، X++ایک یا زیادہ واقعات کو تلاش کرنے کے لیے X، کے واقعات کو X{n}+تلاش کرنے کے لیے ، کم از کم (اور ممکنہ طور پر زیادہ) واقعات کو تلاش کرنے کے لیے، اور کم از کم تلاش کرنے کے لیے لیکن واقعات سے زیادہ نہیں .nXX{n,}+nXX{n,m}+ nmX
مندرجہ ذیل مثال لالچی کوانٹیفائر کے استعمال کی وضاحت کرتی ہے: java RegexDemo .*ox "fox box pox" نتائج یہ ہیں:
regex = .*ox
input = fox box pox
Found [fox box pox] starting at 0 and ending at 10
لالچی کوانٹیفائر ( .*) میں ختم ہونے والے حروف کی طویل ترین ترتیب تلاش کرتا ہے ox۔ یہ پورے ان پٹ ٹیکسٹ کو استعمال کرتا ہے اور پھر اس وقت تک رول بیک کرتا ہے جب تک کہ اسے پتہ نہ لگ جائے کہ ان پٹ ٹیکسٹ ان حروف کے ساتھ ختم ہو جاتا ہے۔ اب سست کوانٹیفائر پر غور کریں: java RegexDemo .*?ox "fox box pox" اس کے نتائج:
regex = .*?ox
input = fox box pox
Found [fox] starting at 0 and ending at 2
Found [ box] starting at 3 and ending at 6
Found [ pox] starting at 7 and ending at 10
سست کوانٹیفائر ( .*?) میں ختم ہونے والے حروف کی مختصر ترین ترتیب تلاش کرتا ہے ox۔ یہ ایک خالی تار سے شروع ہوتا ہے اور آہستہ آہستہ حروف کو استعمال کرتا ہے جب تک کہ اسے کوئی میچ نہ مل جائے۔ اور پھر ان پٹ ٹیکسٹ ختم ہونے تک کام جاری رکھے گا۔ آخر میں، آئیے انتہائی لالچی کوانٹیفائر کو دیکھیں: java RegexDemo .*+ox "fox box pox" اور اس کے نتائج یہ ہیں:
regex = .*+ox
input = fox box pox
اضافی لالچی کوانٹیفائر ( .*+) کو مماثلتیں نہیں ملتی ہیں کیونکہ یہ تمام ان پٹ متن کو استعمال کر لیتا ہے اور oxریگولر ایکسپریشن کے آخر میں میچ کرنے کے لیے کچھ بھی نہیں بچا ہے۔ لالچی کوانٹیفائر کے برعکس، انتہائی لالچی کوانٹیفائر پیچھے نہیں ہٹتا ہے۔

زیرو لینتھ میچز

کبھی کبھی کوانٹیفائرز کے ساتھ کام کرتے وقت آپ کو صفر لمبائی کے میچوں کا سامنا کرنا پڑے گا۔ مثال کے طور پر، درج ذیل لالچی کوانٹیفائر کو استعمال کرنے سے متعدد صفر طوالت کے میچ ہوتے ہیں: java RegexDemo a? abaa اس مثال کو چلانے کے نتائج:
regex = a?
input = abaa
Found [a] starting at 0 and ending at 0
Found [] starting at 1 and ending at 0
Found [a] starting at 2 and ending at 2
Found [a] starting at 3 and ending at 3
Found [] starting at 4 and ending at 3
پھانسی کے نتائج میں پانچ میچز ہیں۔ اگرچہ پہلے، تیسرے اور چوتھے سے کافی توقع کی جاتی ہے (وہ 3 aمیں تین حروف کی پوزیشن سے مطابقت رکھتے ہیں abaa)، دوسرا اور پانچواں آپ کو حیران کر سکتا ہے۔ ایسا لگتا ہے جیسے وہ اشارہ کرتے ہیں کہ متن کے آخر سے کیا aمطابقت رکھتا ہے b، لیکن حقیقت میں ایسا نہیں ہے۔ باقاعدہ اظہار متن کے آخر میں a?تلاش نہیں کرتا ہے ۔ bیہ موجودگی یا غیر موجودگی کی تلاش کرتا ہے a۔ جب a?اسے نہیں ملتا ہے تو aیہ اسے صفر کی لمبائی کے میچ کے طور پر رپورٹ کرتا ہے۔

نیسٹڈ پرچم کے تاثرات

میچرز کچھ پہلے سے طے شدہ مفروضے بناتے ہیں جنہیں ریگولر ایکسپریشن کو پیٹرن میں مرتب کرتے وقت اوور رائڈ کیا جا سکتا ہے۔ اس مسئلے پر ہم بعد میں بات کریں گے۔ ایک ریگولر ایکسپریشن آپ کو نیسٹڈ فلیگ ایکسپریشن کا استعمال کرتے ہوئے کسی بھی ڈیفالٹ کو اوور رائڈ کرنے دیتا ہے۔ یہ ریگولر ایکسپریشن کنسٹرکٹ سوالیہ نشان میٹا کریکٹر ( ?) کے ارد گرد قوسین کے میٹا کریکٹر کے طور پر بیان کیا جاتا ہے، اس کے بعد ایک چھوٹا لاطینی حرف آتا ہے۔ کلاس Patternمندرجہ ذیل گھریلو پرچم کے تاثرات کو سمجھتی ہے:
  • (?i): کیس غیر حساس پیٹرن کی مماثلت کو فعال کرتا ہے۔ مثال کے طور پر، کمانڈ استعمال کرتے وقت، java RegexDemo (?i)tree Treehouseحروف کی ترتیب Treeپیٹرن سے میل کھاتی ہے tree۔ ڈیفالٹ کیس حساس پیٹرن کی تلاش ہے۔
  • (?x): پیٹرن کے اندر میٹا کریکٹر سے شروع ہونے والے وائٹ اسپیس حروف اور تبصروں کے استعمال کی اجازت دیتا ہے #۔ میچر دونوں کو نظر انداز کر دے گا۔ مثال کے طور پر، java RegexDemo ".at(?x)#match hat, cat, and so on" matterحروف کی ترتیب matپیٹرن سے میل کھاتی ہے .at۔ پہلے سے طے شدہ طور پر، وائٹ اسپیس کے حروف اور تبصروں کی اجازت نہیں ہے، اور میچر ان کو تلاش میں شامل کرداروں کے طور پر دیکھتا ہے۔
  • (?s): ڈاٹل موڈ کو فعال کرتا ہے، جس میں ڈاٹ میٹا کیریکٹر کسی دوسرے کردار کے علاوہ لائن سیپریٹرز سے میل کھاتا ہے۔ مثال کے طور پر، کمانڈ کو java RegexDemo (?s). \nایک نئی لائن کیریکٹر ملے گا۔ ڈیفالٹ dotall کے برعکس ہے: کوئی لائن الگ کرنے والا نہیں ملے گا۔ مثال کے طور پر، کمانڈ کو Java RegexDemo . \nکوئی نئی لائن کیریکٹر نہیں ملے گا۔
  • (?m): ملٹی لائن موڈ کو فعال کرتا ہے، جہاں یہ ہر لائن کے ^آغاز اور $اختتام سے میل کھاتا ہے۔ مثال کے طور پر، java RegexDemo "(?m)^abc$" abc\nabcان پٹ ٹیکسٹ میں دونوں ترتیب تلاش کرتا ہے abc۔ پہلے سے طے شدہ طور پر، سنگل لائن موڈ استعمال کیا جاتا ہے: ^پورے ان پٹ متن کے آغاز سے میل کھاتا ہے، اور $اس کے اختتام سے میل کھاتا ہے۔ مثال کے طور پر، java RegexDemo "^abc$" abc\nabcجواب دیتا ہے کہ کوئی مماثلت نہیں ہے۔
  • (?u): یونیکوڈ حساس کیس کی سیدھ کو فعال کرتا ہے۔ یہ جھنڈا، جب کے ساتھ استعمال ہوتا ہے (?i)، یونیکوڈ معیار کے مطابق کیس غیر حساس پیٹرن کی مماثلت کی اجازت دیتا ہے۔ پہلے سے طے شدہ ترتیب صرف کیس-حساس اور US-ASCII حروف تلاش کرنا ہے۔
  • (?d): یونکس طرز کے سٹرنگ موڈ کو فعال کرتا ہے، جہاں میچر سیاق و سباق میں میٹا کریکٹرز کو پہچانتا ہے .، ^اور $صرف لائن الگ کرنے والا \n۔ پہلے سے طے شدہ غیر یونکس طرز کا سٹرنگ موڈ ہے: مماثل مندرجہ بالا میٹا کریکٹرز کے تناظر میں، تمام لائن ڈیلیمٹرز کو پہچانتا ہے۔
نیسٹڈ پرچم کے تاثرات کیپچرڈ گروپس سے ملتے جلتے ہیں کیونکہ ان کے کردار قوسین میٹا کریکٹرز سے گھرے ہوئے ہیں۔ کیپچرڈ گروپس کے برعکس، نیسٹڈ فلیگ ایکسپریشنز نان کیپچرڈ گروپس کی ایک مثال ہیں، جو کہ ایک ریگولر ایکسپریشن کنسٹرکٹ ہیں جو ٹیکسٹ کریکٹرز کو کیپچر نہیں کرتے ہیں۔ ان کی تعریف حروف کی ترتیب کے طور پر کی جاتی ہے جو قوسین کے میٹا حروف سے گھرے ہوتے ہیں۔
متعدد نیسٹڈ فلیگ ایکسپریشنز کی وضاحت کرنا
یہ ممکن ہے کہ ایک ریگولر ایکسپریشن میں متعدد نیسٹڈ فلیگ ایکسپریشنز کو یا تو ساتھ رکھ کر ( (?m)(?i))) رکھ کر یا ان حروف کو رکھ کر جو ان کی ترتیب سے وضاحت کریں ( (?mi)

نتیجہ

جیسا کہ آپ نے شاید اب تک محسوس کیا ہو گا، ریگولر ایکسپریشنز انتہائی مفید ہیں اور اس سے بھی زیادہ کارآمد ہو جاتے ہیں کیونکہ آپ ان کے نحو کی باریکیوں پر عبور حاصل کر لیتے ہیں۔ اب تک میں نے آپ کو ریگولر ایکسپریشنز کی بنیادی باتوں اور Pattern. حصہ 2 میں، ہم Regex API کو گہرائی میں دیکھیں گے اور کے طریقوں کو دریافت کریں Patternگے Matcher۔ PatternSyntaxExceptionمیں آپ کو Regex API کی دو عملی ایپلی کیشنز بھی دکھاؤں گا جنہیں آپ اپنے پروگراموں میں فوری طور پر استعمال کر سکتے ہیں۔ جاوا میں باقاعدہ اظہار، حصہ 3 جاوا میں باقاعدہ اظہار، حصہ 4 جاوا میں باقاعدہ اظہار، حصہ 5
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION