JavaRush /جاوا بلاگ /Random-SD /RegEx: 20 مختصر قدم باقاعده اظهار جي ماهر ڪرڻ لاء. حصو 3
Artur
سطح
Tallinn

RegEx: 20 مختصر قدم باقاعده اظهار جي ماهر ڪرڻ لاء. حصو 3

گروپ ۾ شايع ٿيل
RegEx: 20 مختصر قدم باقاعده اظهار جي ماهر ڪرڻ لاء. حصو 1. RegEx: 20 مختصر مرحلا باقاعده اظهار ۾ مهارت حاصل ڪرڻ لاءِ. حصو 2: ھن حصي ۾ اسين انھن شين ڏانھن وڃون ٿا جيڪي ڪجھ وڌيڪ پيچيده آھن. پر انهن کي ماهر ڪرڻ، اڳ وانگر، ڏکيو نه ٿيندو. مان ورجائي ٿو ته RegEx اصل ۾ ان کان وڌيڪ آسان آهي جيڪو شايد پهرين ۾ لڳي سگهي ٿو، ۽ توهان کي راڪيٽ سائنسدان ٿيڻ جي ضرورت ناهي ان کي ماسٽر ڪرڻ ۽ ان کي عملي طور تي استعمال ڪرڻ شروع ڪيو. هن مضمون جو اصل انگريزي هتي آهي . باقاعده اظهار جي مهارت حاصل ڪرڻ لاء 20 مختصر قدم.  حصو 3 - 1

مرحلا 11: ()گروهه کي پڪڙڻ جي طور تي قوسون

باقاعده اظهار جي مهارت حاصل ڪرڻ لاء 20 مختصر قدم.  حصو 3 - 2پوئين مسئلي ۾، اسان مختلف قسمن جي انٽيجر ويلز ۽ فلوٽنگ پوائنٽ (ڊٽ) عددي قدرن جي ڳولا ڪئي. پر باقاعده اظهار انجڻ انهن ٻن قسمن جي قدرن جي وچ ۾ فرق نه ڪيو، ڇاڪاڻ ته هر شيء هڪ وڏي باقاعده اظهار ۾ قبضو ڪيو ويو آهي. اسان ريگيولر ايڪسپريس انجڻ کي ٻڌائي سگھون ٿا ته مختلف قسمن جي ميچن جي وچ ۾ فرق ڪرڻ جي صورت ۾ جيڪڏهن اسان پنهنجي ننڍڙي نموني کي قوس ۾ شامل ڪريون ٿا:
نمونو: ([AZ])|([az]) 
اسٽرنگ:   بوليويا جو موجوده صدر ايوو مورالس آهي .
ميچون    
: ^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ 122 1222222  
( مثال ) مٿيون باقاعده اظهار ٻن ڪيپچر گروپن کي بيان ڪري ٿو جيڪي 1 کان شروع ٿي ترتيب ڏنل آھن. پھريون ڪيپچر گروپ ڪنھن ھڪڙي وڏي اکر سان ملندو آھي، ۽ ٻيو ڪيپچر گروپ ڪنھن ھڪڙي ننڍڙي اکر سان ملندو آھي. 'يا' نشاني |۽ قوس استعمال ڪرڻ ()سان هڪ پڪڙڻ واري گروپ جي طور تي، اسان هڪ واحد باقاعده اظهار بيان ڪري سگهون ٿا جيڪو ڪيترن ئي قسمن جي تارن سان ملندو آهي. جيڪڏهن اسان هن کي آرٽيڪل جي پوئين حصي مان اسان جي ڊگھي/فلوٽ سرچ ريجڪس تي لاڳو ڪريون ٿا، ته پوءِ ريجڪس انجڻ مناسب گروپن ۾ لاڳاپيل ميچن کي پڪڙيندو. چيڪ ڪرڻ سان ڪھڙي گروپ جو ذيلي اسٽرنگ ملندو آھي، اسان فوري طور تي اندازو لڳائي سگھون ٿا ته اھو فلوٽ ويليو آھي يا ڊگھي قدر:
نمونو: (\d*\.\d+[fF]|\d+\.\d*[fF]|\d+[fF])|(\d+[lL]) 
اسٽرنگ:   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" يا ڊگهو عدد "ڊگهو" سان ملائي رهيا آهيون.
(
  \d*\.\d+[fF] // 1+ انگ اکر ڊيسيمل پوائنٽ جي ساڄي پاسي
  |
  \d+\.\d*[fF] // ڊيسيمل پوائنٽ جي کاٻي پاسي 1+ عدد
  |
  \d+[fF] // ڪو ڊٽ ناهي، صرف 1+ انگ اکر
)
|
(
  \d+[lL] // ڪو ڊٽ ناهي، صرف 1+ انگ اکر
)
"فلوٽ" جي قبضي واري گروپ ۾، اسان وٽ ٽي آپشن آھن: انگ اکر جيڪي گھٽ ۾ گھٽ 1 عددن سان ڊيسيمل پوائنٽ جي ساڄي پاسي، انگن ۾ گھٽ ۾ گھٽ 1 عددن سان ڊيسيمل پوائنٽ جي کاٻي پاسي، ۽ انگ اکر جن ۾ اعشاري نقطي کان سواءِ. انهن مان ڪو به ”فلوٽ“ هوندو آهي جيستائين انهن جي پڇاڙيءَ ۾ ”ف“ يا ”ف“ اکر شامل ٿيل هجي. "ڊگهي" جي قبضي واري گروپ جي اندر، اسان وٽ صرف ھڪڙو اختيار آھي - اسان وٽ لازمي آھي 1 يا وڌيڪ انگ اکر پٺيان "l" يا "L". ريگيولر ايڪسپريس انجڻ انهن ذيلي اسٽرنگ کي ڏنل اسٽرنگ ۾ ڳوليندو ۽ ان کي مناسب ڪيپچر گروپ ۾ انڊيڪس ڪندو. نوٽته اسان انهن نمبرن مان ڪنهن به نمبر سان ملائي نه رهيا آهيون جنهن ۾ "l"، "L"، "f" يا "F" شامل نه آهي. انهن انگن کي ڪيئن درجه بندي ڪرڻ گهرجي؟ خير، جيڪڏهن انهن وٽ هڪ ڊيسيمل پوائنٽ آهي، جاوا ٻولي ڊفالٽ ڪري ٿي "ڊبل". ٻي صورت ۾ اهي "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 11 11 11 11 11 11 111 
( حل )

مرحلا 12: پهرين وڌيڪ مخصوص ميچن جي سڃاڻپ ڪريو

باقاعده اظهار جي مهارت حاصل ڪرڻ لاء 20 مختصر قدم.  حصو 3 - 3توهان کي شايد آخري ڪم سان ڪجهه ڏکيائي ٿئي ها جيڪڏهن توهان "قانوني پيئندڙن" جي وضاحت ڪرڻ جي ڪوشش ڪئي آهي ته پهرين گرفتاري گروپ جي بجاءِ سيڪنڊ جي. سمجھڻ لاء ڇو، اچو ته هڪ ٻيو مثال ڏسو. فرض ڪريو اسان 4 کان گھٽ اکر ۽ 4 يا وڌيڪ اکرن تي مشتمل سرنامن کي الڳ الڳ رڪارڊ ڪرڻ گھرون ٿا. اچو ته پهرين گرفتاري گروپ کي ننڍا نالا ڏيو ۽ ڏسو ته ڇا ٿئي ٿو:
نمونو : ( [ AZ ] [ az 
]   ? _
ملندڙ: ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ 
گروپ:    111 111 11 111 111 111 111   
( مثال ) ڊفالٽ طور، اڪثر ريگيولر ايڪسپريشن انجڻ استعمال ڪن ٿا لالچي ملندڙ بنيادي اکرن جي خلاف جيڪي اسان هينئر تائين ڏٺا آهن. هن جو مطلب آهي ته باقاعده ايڪسپريس انجڻ تمام ڊگهي گروپ کي پڪڙيندو، جيترو جلدي ممڪن ٿي سگهي بيان ڪيل باقاعده اظهار ۾. تنهن ڪري جيتوڻيڪ مٿيون ٻيو گروپ نالن ۾ وڌيڪ ڪردارن کي پڪڙي سگهي ٿو جهڙوڪ ”نوڪريون“ ۽ ”ڪلوئڊ“ مثال طور، پر جيئن ته انهن نالن جا پهريان ٽي ڪردار پهريان ئي پهرين ڪيپچر گروپ طرفان پڪڙيا ويا هئا، ان ڪري اهي ٻئي نمبر تي ٻيهر پڪڙي نٿا سگهن. . ھاڻي اچو ھڪڙو ننڍڙو سڌارو ڪريون - صرف پڪڙڻ واري گروپن جي ترتيب کي تبديل ڪريو، وڌيڪ مخصوص (ڊگھو) گروپ کي پھريون:
نمونو: ([AZ][az][az][az]+)|([AZ][az]?[az]؟) 
تار:   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]؟) 
تار:   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} 
تار:   humuhumunuk unukuaapua'a.
ملندڙ: ^^^^^^^^^^   
( مثال )
نمونو: [az]{18,} 
تار:   humuhumunukunukupua 'a.
ملندڙ: ^^^^^^^^^^^^^^^^^^^    
( مثال )
نمونو: [az]{11,18} 
تار:   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) (OfSalesmen!)
ملندڙ: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( حل )

قدم 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\" 
اسٽرنگ:   "12345" "منهنجو پاسورڊ" " Xanadu. 2112" "su_do" "آف سيلزمين!"
ملندڙ: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^  
( مثال ) لفظن جي حدن کي اقتباس جي نشانين ("\b ... \b") جي اندر رکڻ سان، اسان مؤثر طريقي سان چئي رهيا آهيون ته ملندڙ پاسورڊ جي پهرين ۽ آخري اکر "لفظ جا اکر" هجڻ گهرجن. تنهن ڪري اهو هتي ٺيڪ ڪم ڪري ٿو، پر اهو پڻ ڪم نه ڪندو جيڪڏهن صارف جي پاسورڊ جو پهريون يا آخري ڪردار لفظ جو ڪردار نه آهي:
نمونو: \"\b[^"]{0.5}\b\"|\"\b[^"]+\s[^"]*\b\"
string: "the followingpasswordisttoshort" "C++"
ملن:   
( مثال ) ڏسو ته ڪيئن ٻئي پاسورڊ کي "غلط" طور نشان نه لڳايو ويو آهي جيتوڻيڪ اهو واضح طور تي تمام ننڍو آهي. توهان کي ضرور هجڻ گهرجيمحتاطتسلسل سان \b، ڇاڪاڻ ته اهي صرف ڪردارن جي وچ ۾ حدون ملن ٿا \w۽ نه \w. مٿين مثال ۾، جيئن ته اسان اکرن کي اجازت نه ڏني آهي، پاسورڊ ۾ ، پاس ورڊ جي پهرين/آخري اکرن جي \wوچ ۾ حد ۽ لفظ جي حد هجڻ جي ضمانت نه آهي . \\b

هن قدم کي مڪمل ڪرڻ لاء، اسان صرف هڪ سادي مسئلو حل ڪنداسين:

لفظن جون حدون نحو کي نمايان ڪرڻ واري انجڻ ۾ ڪارآمد آهن جڏهن اسان اکرن جي مخصوص ترتيب سان ملائڻ چاهيون ٿا، پر پڪ ڪرڻ چاهيون ٿا ته اهي صرف لفظ جي شروعات يا آخر ۾ ٿين ٿيون (يا پاڻ تي). اچو ته چئو ته اسان نحو کي نمايان ڪري رهيا آهيون ۽ لفظ var کي اجاگر ڪرڻ چاهيون ٿا، پر صرف جڏهن اهو ظاهر ٿئي ٿو (لفظ ۾ ٻين اکرن کي ڇڪڻ کان سواء). ڇا توهان ان لاءِ باقاعده اظهار لکي سگهو ٿا؟ يقينا توهان ڪري سگهو ٿا، اهو هڪ تمام آسان ڪم آهي؛)
نموني:
تار:   var varx _var ( var j) barvarcar * var var -> { var }
ملندڙ: ^^^ ^^^ ^^^ ^^^ ^^^  
( حل )

قدم 15: "ڪارٽ" ^"ليڪ جي شروعات" جي طور تي ۽ ڊالر جي نشاني $"ليڪ جي آخر" جي طور تي

باقاعده اظهار جي مهارت حاصل ڪرڻ لاء 20 مختصر قدم.  حصو 3 - 6لفظ جي حد جي ترتيب \b(مضمون جي پوئين حصي جي آخري مرحلي مان) صرف خاص صفر-چوٿون تسلسل نه آهي جيڪو باقاعده اظهار ۾ استعمال لاءِ موجود آهي. ٻه سڀ کان وڌيڪ مشهور آهن "ڪيريٽ" ^- "لائن جي شروعات" ۽ ڊالر جي نشاني $- "ليڪ جي آخر". انهن مان هڪ کي توهان جي باقاعده اظهار ۾ شامل ڪرڻ جو مطلب آهي ته ميچ لازمي طور تي ظاهر ٿيڻ گهرجي ماخذ اسٽرنگ جي شروعات يا آخر ۾:
نموني: ^start|end$ 
string:   start end start start end start end start end 
matches: ^^^^^ ^^^  
( مثال ) جيڪڏهن توهان جي اسٽرنگ ۾ لائين بريڪ شامل آهن، اهو ^startڪنهن به لڪير جي شروعات ۾ ترتيب "شروع" سان ملندو، ۽ end$ڪنهن به لڪير جي آخر ۾ ترتيب "آخر" سان ملندو (جيتوڻيڪ اهو هتي ڏيکارڻ ڏکيو آهي). اهي علامتون خاص طور تي ڪارائتو آهن جڏهن ڊيٽا سان ڪم ڪري رهيا آهن جن ۾ حدون شامل آهن. اچو ته "فائل سائيز" جي مسئلي ڏانهن واپس وڃو قدم 9 کان ^"لائن جي شروعات" استعمال ڪندي. هن مثال ۾، اسان جي فائلن جي سائيز کي اسپيس " " سان ورهايو ويو آهي. تنهن ڪري اسان چاهيون ٿا ته هر فائل جي سائيز هڪ نمبر سان شروع ٿئي، هڪ خلائي ڪردار کان اڳ يا لائن جي شروعات:
نمونو 
:   ( ^ _ _ _ _ _ _ _
ملندڙ: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
گروپ:    222 122 1222 12    
( مثال ) اسان اڳ ۾ ئي مقصد جي تمام ويجهو آهيون! پر توهان شايد محسوس ڪيو ته اسان وٽ اڃا تائين هڪ ننڍڙو مسئلو آهي: اسان صحيح فائل جي سائيز کان اڳ خلائي ڪردار سان ملائي رهيا آهيون. ھاڻي اسان رڳو ھن ڪيپچرنگ گروپ کي نظر انداز ڪري سگھون ٿا (1) جڏھن اسان جو ريگولر ايڪسپريشن انجڻ ان کي ڳولي ٿو، يا اسان ھڪڙو غير ڪيپچرنگ گروپ استعمال ڪري سگھون ٿا، جنھن کي اسين ايندڙ قدم ۾ ڏسنداسين.

ساڳئي وقت ۾، اچو ته حل لاء 2 وڌيڪ مسئلا حل ڪريون:

اسان جي نحو کي نمايان ڪرڻ واري مثال کي آخري قدم کان جاري رکندي، ڪجهه نحو کي نمايان ڪرڻ واري جاءِ کي نشان لڳندي، يعني ڪا به اسپيس جيڪا غير وائيٽ اسپيس ڪردار ۽ لڪير جي پڇاڙيءَ جي وچ ۾ اچي. ڇا توھان لکي سگھوٿا ريجڪس صرف پٺتي پيل جڳھن کي اجاگر ڪرڻ لاءِ؟
نموني:
اسٽرنگ: myvec <- c(1, 2, 3, 4, 5)  
ملندڙ:                          ^^^^^^^  
( حل ) هڪ سادو ڪاما کان الڳ ڪيل قدر (CSV) parser ڏسندو ”ٽوڪن“ ڪاما سان الڳ ٿيل. عام طور تي، خلا جي ڪا به معنيٰ نه هوندي آهي جيستائين اهو حوالن جي نشانين ۾ بند نه هجي "". هڪ سادي 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