JavaRush /جاوا بلاگ /Random-SD /جاوا ۾ باقاعده اظهار، حصو 1

جاوا ۾ باقاعده اظهار، حصو 1

گروپ ۾ شايع ٿيل
اسان توهان جي ڌيان ۾ آڻيون ٿا هڪ مختصر گائيڊ جو ترجمو جاوا ٻولي ۾ باقاعده اظهار لاءِ، جيف فريسن پاران لکيل جاوا ورلڊ ويب سائيٽ لاءِ . پڙهڻ جي آسانيءَ لاءِ، اسان مضمون کي ڪيترن ئي حصن ۾ ورهايو آهي. جاوا ۾ باقاعده اظهار، حصو 1 - 1

جاوا پروگرامن ۾ ريگيولر ايڪسپريس API استعمال ڪندي نمونن کي سڃاڻڻ ۽ بيان ڪرڻ لاءِ

جاوا جو ڪردار ۽ مختلف اسٽرنگ ڊيٽا جا قسم نمونن جي ميلاپ لاءِ گھٽ-سطح جي مدد مهيا ڪن ٿا، پر انھن کي ھن مقصد لاءِ استعمال ڪرڻ عام طور تي اھم ڪوڊ پيچيدگي شامل ڪري ٿو. آسان ۽ وڌيڪ ڪارڪردگي ڪوڊ Regex API ("Regular Expression API") استعمال ڪندي حاصل ڪيو ويندو آهي. هي سبق توهان کي باقاعده اظهار ۽ Regex API سان شروع ڪرڻ ۾ مدد ڪندو. اسان پهرين عام طور تي پيڪيج ۾ ٽن دلچسپ ترين طبقن تي بحث ڪنداسين java.util.regex، ۽ پوء ڪلاس اندر هڪ نظر وٺو Pattern۽ ان جي نفيس نموني سان ملندڙ تعميرات کي ڳوليندا. ڌيان: توھان ڊائون لوڊ ڪري سگھوٿا ماخذ ڪوڊ (جيف فريسن پاران ٺاھيل جاوا ورلڊ سائيٽ لاءِ) ڊيمو ايپليڪيشن جو ھن آرٽيڪل مان ھتان .

باقاعده اظهار ڇا آهن؟

هڪ باقاعده اظهار (باقاعده اظهار/regex/regexp) هڪ اسٽرنگ آهي جيڪو هڪ نمونو آهي جيڪو بيان ڪري ٿو هڪ مخصوص سيٽ جي اسٽرنگ. نموني اهو طئي ڪري ٿو ته ڪهڙيون قطارون سيٽ سان تعلق رکن ٿيون. اهو نمونو لغوي معنيٰ جي بجاءِ خاص معنيٰ رکندڙ حرفن ۽ ميٽا اکرڪٽرن تي مشتمل آهي. پيٽرن جي ميلاپ، ملندڙن کي ڳولڻ لاءِ متن جي ڳولا آهي، يعني تارون جيڪي باقاعده اظهار جي نموني سان ملن ٿيون. جاوا ان جي ريجڪس API ذريعي نموني جي ميلاپ کي سپورٽ ڪري ٿو. هي API ٽن طبقن تي مشتمل آهي: Pattern, Matcher۽ PatternSyntaxException, پيڪيج ۾ واقع java.util.regex:
  • class objects Pattern، جنهن کي ٽيمپليٽس پڻ سڏيو ويندو آهي، ترتيب ڏنل آهن باقاعده اظهار.
  • class objects Matcher, or matchers , نمونن جي تشريح ڪرڻ وارا ميڪانيزم آھن ڪردارن جي ترتيبن ۾ ميچن کي ڳولڻ لاءِ (اھي شيون جن جا ڪلاس انٽرفيس کي لاڳو ڪن ٿا java.lang.CharSequence۽ متن جي ذريعن طور ڪم ڪن ٿا).
  • ڪلاس جون شيون PatternSyntaxExceptionاستعمال ڪيون وينديون آھن غلط باقاعده اظهار جي نمونن کي بيان ڪرڻ لاءِ.
جاوا پڻ مختلف طريقن سان نموني جي ميلاپ لاءِ مدد فراهم ڪري ٿي java.lang.String. مثال طور، فنڪشن صرف ان صورت ۾ boolean matches (String regex)موٽائي ٿو trueجڏهن ڪالنگ اسٽرنگ باقاعده اظهار سان ملندو آهي regex.
آسان طريقا
matches()۽ ڪلاس جا ٻيا باقاعده اظهار تي مبني سهوليت جا طريقا Stringرجڪس API سان ملندڙ جلندڙ طريقي سان لاڳو ڪيا ويا آهن.

RegexDemo

RegexDemoمون جاوا ريگيولر ايڪسپريسشن ۽ مختلف طريقن کي ڏيکارڻ لاءِ هڪ ايپليڪيشن ٺاهي Pattern، Matcher۽ PatternSyntaxException. هيٺ ڏنل آهي سورس ڪوڊ هن ڊيمو ايپليڪيشن لاءِ. لسٽنگ 1. باقاعده اظهار جو مظاهرو
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class RegexDemo
{
   public static void main(String[] args)
   {
      if (args.length != 2)
      {
         System.err.println("usage: java RegexDemo regex input");
         return;
      }
      // Преобразуем символьные последовательности начала новой строки (\n) в символы начала строки.
      args[1] = args[1].replaceAll("\\\\n", "\n");
      try
      {
         System.out.println("regex = " + args[0]);
         System.out.println("input = " + args[1]);
         Pattern p = Pattern.compile(args[0]);
         Matcher m = p.matcher(args[1]);
         while (m.find())
            System.out.println("Found [" + m.group() + "] starting at "
                               + m.start() + " and ending at " + (m.end() - 1));
      }
      catch (PatternSyntaxException pse)
      {
         System.err.println("Неправильное регулярное выражение: " + pse.getMessage());
         System.err.println("Описание: " + pse.getDescription());
         System.err.println("Позиция: " + pse.getIndex());
         System.err.println("Неправильный шаблон: " + pse.getPattern());
      }
   }
}
mainپهرين شيء هڪ طبقي جو طريقو آهي RegexDemoان جي ڪمانڊ لائن چيڪ ڪريو. ان لاءِ ٻن دليلن جي ضرورت آھي: پھريون ھڪڙو باقاعده اظهار آھي، ۽ ٻيو اھو آھي ان پٽ ٽيڪسٽ جنھن ۾ باقاعده اظهار جي ڳولا ڪئي ويندي. توھان کي ان پٽ ٽيڪسٽ اندر ھڪڙو نئون لائن اکر استعمال ڪرڻ جي ضرورت پوندي (\n). \اهو صرف ڪردار جي پٺيان ڏنل ڪردار جي وضاحت ڪندي ڪري سگهجي ٿو n. فنڪشن main()هن ڪردار جي ترتيب کي يونيڪوڊ ويليو 10 ۾ تبديل ڪري ٿو. ڪوڊ جاوا ۾ باقاعده اظهار، حصو 1 - 2جو وڏو حصو . بلاڪ پهريون ڀيرو ڏنل ريگيولر ايڪسپريشن ۽ ان پٽ ٽيڪسٽ کي آئوٽ ڪري ٿو، ۽ پوءِ هڪ اعتراض ٺاهي ٿو جيڪو مرتب ڪيل ريگيولر ايڪسپريشن کي محفوظ ڪري ٿو (باقاعدي ايڪسپريشن کي مرتب ڪيو ويو آهي نمونن جي ملندڙ ڪارڪردگي کي بهتر ڪرڻ لاءِ). هڪ ميچر اعتراض مان ڪڍيو ويندو آهي ۽ ميچز جي ڳولا لاءِ استعمال ڪيو ويندو آهي تيستائين جيستائين سڀئي مليا وڃن. بلاڪ ڪيترن ئي طبقن جي طريقن کي سڏي ٿو استثنا بابت مفيد معلومات حاصل ڪرڻ لاء. اها معلومات ترتيب وار آئوٽ پٽ اسٽريم ڏانهن ويندي آهي. تفصيلات ڄاڻڻ جي ڪا ضرورت ناهي ته ڪوڊ اڃا تائين ڪيئن ڪم ڪري ٿو: اهي واضح ٿي ويندا جڏهن اسان مضمون جي ٻئي حصي ۾ API جو مطالعو ڪنداسين. بهرحال، توهان کي لسٽنگ 1 مرتب ڪرڻ گهرجي. لسٽنگ 1 مان ڪوڊ وٺو، ۽ پوءِ ڪمپائل ڪرڻ لاءِ ڪمانڊ پرامپٽ تي هيٺ ڏنل ڪمانڊ ٽائپ ڪريو : RegexDemotry-catchtryPatternPatterncatchPatternSyntaxExceptionRegexDemojavac RegexDemo.java

پيٽرن ڪلاس ۽ ان جي تعمير

ڪلاس Pattern، ٽن طبقن مان پهريون جيڪو Regex API ٺاهيندو آهي، هڪ منظم اظهار جو مرتب ڪيل نمائندگي آهي. ڪلاس SDK دستاويز Patternبيان ڪري ٿو مختلف قسم جي باقاعده اظهار جي تعمير، پر جيڪڏهن توهان فعال طور تي باقاعده اظهار استعمال نٿا ڪريو، هن دستاويز جا حصا شايد مونجهاري ۾ هجن. quantifiers ڇا آهن ۽ لالچي، ناگزير ۽ possessive quantifiers جي وچ ۾ ڇا فرق آهي؟ ڪردار جا ڪلاس، بائونڊري ميچرز، پٺاڻ حوالا، ۽ ايمبيڊڊ پرچم ايڪسپريس ڇا آهن؟ آئون انهن ۽ ٻين سوالن جا جواب هيٺين حصن ۾ ڏيندس.

لفظي تار

سڀ کان آسان باقاعده اظهار جي تعمير هڪ لفظي اسٽرنگ آهي. نموني جي ميلاپ لاءِ ڪامياب ٿيڻ لاءِ، ان پٽ ٽيڪسٽ جو ڪجهه حصو لازمي طور تي ان تعمير جي نموني سان ملندو. ھيٺ ڏنل مثال تي غور ڪريو: ھن مثال ۾، اسان ان پٽ ٽيڪسٽ ۾ java RegexDemo apple applet ھڪڙي نموني لاء ھڪڙو ميچ ڳولڻ جي ڪوشش ڪري رھيا آھيون . هيٺ ڏنل نتيجو ڏيکاريو ميچ مليو: appleapplet
regex = apple
input = applet
Found [apple] starting at 0 and ending at 4
اسان آئوٽ پٽ ۾ باقاعده اظهار ۽ ان پٽ ٽيڪسٽ ڏسو، ۽ پوء appleايپلٽ ۾ ڪامياب ڳولڻ جو اشارو. ان کان علاوه، هن ميچ جي شروعاتي ۽ ختم ٿيڻ واري پوزيشن ڏني وئي آهي: 0۽ 4، ترتيب سان. شروعاتي پوزيشن متن ۾ پهرين جڳهه کي ظاهر ڪري ٿو جتي هڪ ميچ مليو هو، ۽ آخري پوزيشن ميچ جي آخري پوائنٽ کي ظاهر ڪري ٿو. ھاڻي چئو ته اسان ھيٺ ڏنل ڪمانڊ لائين ڏني آھي: java RegexDemo apple crabapple ھن ڀيري اسان ھيٺ ڏنل نتيجو حاصل ڪندا آھيون، مختلف شروعاتي ۽ ختم ٿيڻ واري پوزيشن سان:
regex = apple
input = crabapple
Found [apple] starting at 4 and ending at 8
ٻي صورت ۾، appletباقاعده اظهار سان ۽ جيئن apple- ان پٽ ٽيڪسٽ، ڪوبه ميلاپ نه ملندو. سڄو باقاعدي اظهار ضرور ملندو، پر هن صورت ۾، ان پٽ ٽيڪسٽ tبعد ۾ شامل نه آهي apple. جاوا ۾ باقاعده اظهار، حصو 1 - 3

Metacharacters

وڌيڪ دلچسپ ريگيولر ايڪسپريشن لغوي اکرن کي ميٽا اچار سان گڏ ڪن ٿا. مثال طور، هڪ باقاعده اظهار ۾ a.b، ڊٽ ميٽ اچارڪر (.)جو مطلب آهي ڪنهن به ڪردار جي وچ ۾ a۽ ب. ھيٺ ڏنل مثال تي غور ڪريو: java RegexDemo .ox "The quick brown fox jumps over the lazy ox." ھي مثال .oxباقاعده اظهار ۽ The quick brown fox jumps over the lazy ox.ان پٽ متن جي طور تي استعمال ڪري ٿو. RegexDemoڪنهن به ڪردار سان شروع ٿيندڙ ۽ ختم ٿيڻ واري ميچز لاءِ متن ڳولهي ٿو ox.ان جي عمل جا نتيجا هن ريت آهن:
regex = .ox
input = The quick brown fox jumps over the lazy ox.
Found [fox] starting at 16 and ending at 18
Found [ ox] starting at 39 and ending at 41
آئوٽ پٽ ۾ اسان ٻه ميچون ڏسون ٿا: fox۽ ox(ان جي سامهون هڪ خلائي ڪردار سان). Metacharacter پهرين صورت ۾ . هڪ ڪردار f۽ ٻئي ۾ هڪ خلا سان ملندو آهي. ڇا ٿيندو جيڪڏھن توھان ان کي مٽائي .oxھڪ ميٽا اچار سان .؟ اھو آھي، جيڪو ھيٺ ڏنل ڪمانڊ لائن جي نتيجي ۾ اسان کي حاصل ٿئي ٿو: java RegexDemo . "The quick brown fox jumps over the lazy ox." ڊاٽ ميٽا اچارڪٽر ڪنھن به اکر سان ملندو آھي، RegexDemoان پٽ ٽيڪسٽ جي سڀني اکرن (بشمول ٽريلنگ ڊٽ ڪردار) لاءِ ملندڙ ميچ آئوٽ ڪندو:
regex = .
input = The quick brown fox jumps over the lazy ox.
Found [T] starting at 0 and ending at 0
Found [h] starting at 1 and ending at 1
Found [e] starting at 2 and ending at 2
Found [ ] starting at 3 and ending at 3
Found [q] starting at 4 and ending at 4
Found [u] starting at 5 and ending at 5
Found [i] starting at 6 and ending at 6
Found [c] starting at 7 and ending at 7
Found [k] starting at 8 and ending at 8
Found [ ] starting at 9 and ending at 9
Found [b] starting at 10 and ending at 10
Found [r] starting at 11 and ending at 11
Found [o] starting at 12 and ending at 12
Found [w] starting at 13 and ending at 13
Found [n] starting at 14 and ending at 14
Found [ ] starting at 15 and ending at 15
Found [f] starting at 16 and ending at 16
Found [o] starting at 17 and ending at 17
Found [x] starting at 18 and ending at 18
Found [ ] starting at 19 and ending at 19
Found [j] starting at 20 and ending at 20
Found [u] starting at 21 and ending at 21
Found [m] starting at 22 and ending at 22
Found [p] starting at 23 and ending at 23
Found [s] starting at 24 and ending at 24
Found [ ] starting at 25 and ending at 25
Found [o] starting at 26 and ending at 26
Found [v] starting at 27 and ending at 27
Found [e] starting at 28 and ending at 28
Found [r] starting at 29 and ending at 29
Found [ ] starting at 30 and ending at 30
Found [t] starting at 31 and ending at 31
Found [h] starting at 32 and ending at 32
Found [e] starting at 33 and ending at 33
Found [ ] starting at 34 and ending at 34
Found [l] starting at 35 and ending at 35
Found [a] starting at 36 and ending at 36
Found [z] starting at 37 and ending at 37
Found [y] starting at 38 and ending at 38
Found [ ] starting at 39 and ending at 39
Found [o] starting at 40 and ending at 40
Found [x] starting at 41 and ending at 41
Found [.] starting at 42 and ending at 42
اقتباس metacharacters
بيان ڪرڻ لاءِ .يا ڪنهن ٻئي ميٽا اچار کي لفظي ڪردار جي طور تي هڪ باقاعده اظهار جي تعمير ۾، توهان کي لازمي طور تي ان کي هيٺين طريقن مان هڪ کان بچڻ گهرجي:
  • ان جي اڳيان هڪ backslash ڪردار سان؛
  • ھن ميٽا اچار کي وچ ۾ رکو \Q۽ \E(مثال طور، \Q.\E).
ڪنهن به اکر کي نقل ڪرڻ ياد رکو جيڪي لفظي اسٽرنگ ۾ ظاهر ٿين ٿا، جهڙوڪ String regex = "\\.";پٺتي پيل (مثال طور، \\.يا \\Q.\\E). انهن پٺاڻن کي نقل نه ڪريو جيڪي ڪمانڊ لائن دليل جو حصو آهن.

ڪردار جا ڪلاس

ڪڏهن ڪڏهن توهان کي انهن ميچن کي محدود ڪرڻو پوندو جيڪي توهان ڳولي رهيا آهيو اکرن جي مخصوص سيٽ تائين. مثال طور، متن ڳولھيو a, , e, i, , o, u, , with the ever invention of a vowel letter . اهڙن مسئلن کي حل ڪرڻ ۾، اسان کي ڪردارن جي طبقن جي مدد ملندي، جيڪي چورس بریکٹ ( [ ]) جي ميٽا اچار جي وچ ۾ ڪردارن جي سيٽ کي بيان ڪن ٿا. ڪلاس Patternسادو ڪردار طبقن، رينج ڪلاس، انورس، يونين، چونڪ، ۽ ذيلي تقسيم طبقن کي سپورٽ ڪري ٿو. اسان انهن سڀني کي هاڻي ڏسنداسين.

سادي ڪردار جا ڪلاس

ھڪڙو سادو ڪردار طبقو اکرن تي مشتمل ھوندو آھي اک سان رکيل ھوندو آھي ۽ صرف انھن اکرن سان ملندو آھي. مثال طور، ڪلاس [abc]اکرن سان ملندو آهي a، b۽ c. ھيٺ ڏنل مثال تي غور ڪريو: java RegexDemo [csw] cave جيئن توھان نتيجن مان ڏسي سگھو ٿا، ھن مثال ۾ صرف اھو ڪردار آھي cجنھن لاءِ ھڪڙو ميچ آھي cave:
regex = [csw]
input = cave
Found [c] starting at 0 and ending at 0

بدليل ڪردار جا طبقا

هڪ inverted ڪردار ڪلاس هڪ metacharacter سان شروع ٿئي ٿو ^۽ صرف انهن اکرن سان ملندو آهي جيڪي ان ۾ شامل نه آهن. مثال طور، ڪلاس [^abc]سڀني اکرن سان ملندو آهي سواءِ a، b۽ c. هيٺ ڏنل مثال تي غور ڪريو: java RegexDemo "[^csw]" cave نوٽ ڪريو ته منهنجي آپريٽنگ سسٽم تي (ونڊوز) ڊبل اقتباس گهربل آهن ڇو ته شيل انهن کي ^هڪ فرار ڪردار جي طور تي علاج ڪري ٿو. جيئن توهان ڏسي سگهو ٿا، هن مثال ۾ صرف اکر a، v۽ مليا هئا e، جن لاءِ ملندڙ آهن cave:
regex = [^csw]
input = cave
Found [a] starting at 1 and ending at 1
Found [v] starting at 2 and ending at 2
Found [e] starting at 3 and ending at 3

ڪردارن جي درجي بندي

هڪ رينج ڪيڪر ڪلاس ٻن اکرن تي مشتمل هوندو آهي جيڪو هائيفن ( -) سان جدا ٿيل هوندو آهي. سڀ اکر، حروف جي کاٻي پاسي واري ڪردار سان شروع ٿيندڙ ۽ ساڄي پاسي واري ڪردار سان ختم ٿيندڙ، حد جو حصو آهن. مثال طور، حد [a-z]سڀني ننڍن لاطيني اکرن سان ملائي ٿي. هي هڪ سادي طبقي جي وضاحت ڪرڻ جي برابر آهي [abcdefghijklmnopqrstuvwxyz]. هيٺ ڏنل مثال تي غور ڪريو: java RegexDemo [a-c] clown هي مثال صرف ان ڪردار سان ملندو cجنهن ۾ هڪ ميل آهي clown:
regex = [a-c]
input = clown
Found [c] starting at 0 and ending at 0
جاوا ۾ باقاعده اظهار، حصو 2 جاوا ۾ باقاعده اظهار، حصو 3 جاوا ۾ باقاعده اظهار، حصو 4 جاوا ۾ باقاعده اظهار، حصو 5
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION