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

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

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

گرفتار ٿيل گروپن سان ڪم ڪرڻ جا طريقا

ايپليڪيشن جو سورس ڪوڊ RegexDemoشامل آهي هڪ طريقو ڪال m.group(). اهو طريقو group()طبقن جي ڪيترن ئي طريقن مان هڪ آهي Matcherجنهن جو مقصد قبضو ڪيل گروپن سان ڪم ڪرڻ آهي:
  • طريقو int groupCount()حل ڪندڙ نموني ۾ قبضو ڪيل گروپن جو تعداد واپس ڪري ٿو. هي نمبر خاص ڪيپچر گروپ نمبر 0 جي حساب ۾ نٿو رکي، جيڪو مجموعي طور تي نموني سان ملندو آهي.

  • طريقو String group()واپس مليا پوئين ميچ جا ڪردار. هڪ خالي اسٽرنگ لاءِ ڪامياب ڳولا جي رپورٽ ڪرڻ لاءِ، هي طريقو هڪ خالي اسٽرنگ موٽائي ٿو. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

  • اهو طريقو String group(int group)پوئين طريقي سان ملندڙ جلندڙ آهي، سواءِ ان جي ته اهو مليل پوئين ميچ جا اکر واپس ڪري ٿو، پيراميٽر پاران بيان ڪيل گروپ نمبر طرفان قبضو ڪيو ويو آهي group. نوٽ ڪريو ته هي group(0)برابر آهي group(). جيڪڏهن ٽيمپليٽ ۾ ڏنل نمبر سان گڏ ڪيل گروپ نه آهي، طريقو هڪ استثنا ڏئي ٿو IndexOutOfBoundsException. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

  • طريقو String group(String name)واپس مليا پوئين ميچ جا ڪردار، نالي گروپ طرفان قبضو ڪيو ويو. جيڪڏهن قبضو ڪيل گروپ جو نالو ٽيمپليٽ ۾ نه آهي، هڪ استثنا اڇلايو ويندو آهي IllegalArgumentException. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

هيٺ ڏنل مثال ڏيکاري ٿو استعمال groupCount()۽ طريقن جو group(int group):
Pattern p = Pattern.compile("(.(.(.)))");
Matcher m = p.matcher("abc");
m.find();
System.out.println(m.groupCount());
for (int i = 0; i <= m.groupCount(); i++)
System.out.println(i + ": " + m.group(i));
عملدرآمد جا نتيجا:
3
0: abc
1: abc
2: bc
3: c
جاوا ۾ باقاعده اظهار، حصو 4 - 2

ميچ جي پوزيشن کي طئي ڪرڻ لاء طريقا

ڪلاس Matcherڪيترائي طريقا مهيا ڪري ٿو جيڪي ميچ جي شروعاتي ۽ ختم ٿيڻ واري پوزيشن کي واپس ڪن ٿا:
  • اهو طريقو int start()گذريل ميچ جي شروعاتي پوزيشن کي واپس ڏئي ٿو. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

  • اهو طريقو int start(int group)پوئين طريقي سان ملندڙ جلندڙ آهي، پر ان گروپ لاءِ مليل پوئين ميچ جي شروعاتي پوزيشن واپس ڪري ٿو جنهن جو نمبر پيراميٽر طرفان بيان ڪيو ويو آهي group. جيڪڏهن ٽيمپليٽ ۾ ڏنل نمبر سان گڏ ڪيل گروپ نه آهي، طريقو هڪ استثنا ڏئي ٿو IndexOutOfBoundsException. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

  • اهو طريقو int start(String name)پوئين طريقي سان ملندڙ جلندڙ آهي، پر گروپ لاءِ مليل پوئين ميچ جي شروعاتي پوزيشن واپس ڪري ٿو جنهن کي سڏيو ويندو آهي name. جيڪڏهن قبضو ڪيل گروپ nameٽيمپليٽ ۾ نه آهي، هڪ استثنا اڇلايو ويندو آهي IllegalArgumentException. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

  • اهو طريقو int end()گذريل ميچ جي آخري ڪردار جي پوزيشن کي واپس ڏئي ٿو پلس 1. جيڪڏهن ميچر اڃا تائين ميچ نه ڪئي آهي يا اڳوڻو سرچ آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويندو آهي IllegalStateException.

  • اهو طريقو int end(int group)پوئين طريقي سان ملندڙ جلندڙ آهي، پر ان گروپ لاءِ مليل پوئين ميچ جي ختم ٿيڻ واري پوزيشن کي واپس ڏئي ٿو، جنهن جو نمبر پيراميٽر طرفان بيان ڪيو ويو آهي group. جيڪڏهن ٽيمپليٽ ۾ ڏنل نمبر سان گڏ ڪيل گروپ نه آهي، طريقو هڪ استثنا ڏئي ٿو IndexOutOfBoundsException. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

  • اهو طريقو int end(String name)پوئين طريقي سان ملندڙ جلندڙ آهي، پر گروپ لاءِ مليل پوئين ميچ جي آخري پوزيشن واپس ڪري ٿو جنهن کي سڏيو ويندو آهي name. جيڪڏهن قبضو ڪيل گروپ nameٽيمپليٽ ۾ نه آهي، هڪ استثنا اڇلايو ويندو آهي IllegalArgumentException. جيڪڏهن حل ڪندڙ اڃا تائين هڪ ڳولها نه ڪيو آهي يا اڳوڻو ڳولڻ وارو آپريشن ناڪام ٿيو، هڪ استثنا اڇلايو ويو آهي IllegalStateException.

هيٺ ڏنل مثال ٻن ميچ جي جڳھ جي طريقن کي ڏيکاري ٿو جيڪي گروپ نمبر 2 تي قبضو ڪرڻ لاء شروعاتي/آخري ميچ جي پوزيشن کي ٻاھر ڪڍن ٿا.
Pattern p = Pattern.compile("(.(.(.)))");
Matcher m = p.matcher("abcabcabc");
while (m.find())
{
   System.out.println("Найдено " + m.group(2));
   System.out.println("  начинается с позиции " + m.start(2) +
                      " и заканчивается на позиции " + (m.end(2) - 1));
   System.out.println();
}
هن مثال جي پيداوار هيٺ ڏنل آهي:
Найдено bc
начинается с позиции 1 и заканчивается на позиции 2
Найдено bc
начинается с позиции 4 и заканчивается на позиции 5
Найдено bc
начинается с позиции 7 и заканчивается на позиции 8

PatternSyntaxException class جا طريقا

ڪلاس جو هڪ مثال PatternSyntaxExceptionباقاعده اظهار ۾ نحو جي غلطي کي بيان ڪري ٿو. طريقن compile()۽ matches()طبقن مان اهڙي استثنا کي اڇلائي ٿو Pattern، ۽ هيٺ ڏنل تعمير ڪندڙ جي ذريعي ٺهيل آهي: PatternSyntaxException(String desc, String regex, int index) هي تعمير ڪندڙ مخصوص وضاحت ( descباقاعده اظهار ( regex)، ۽ پوزيشن کي محفوظ ڪري ٿو جتي نحو جي غلطي واقع ٿي. جيڪڏهن نحو جي غلطي جو مقام نامعلوم ناهي، قيمت indexمقرر ڪئي وئي آهي -1. گهڻو ڪري، توهان کي ڪڏهن به مثال ٺاهڻ جي ضرورت نه پوندي PatternSyntaxException. بهرحال، توهان کي مٿين قدرن کي ڪڍڻ جي ضرورت پوندي جڏهن هڪ فارميٽ ٿيل غلطي پيغام ٺاهي. هن کي ڪرڻ لاء، توهان هيٺيان طريقا استعمال ڪري سگهو ٿا:
  • طريقو String getDescription()نحو جي غلطي جي وضاحت ڏي ٿو.
  • طريقو int getIndex()يا ته پوزيشن واپس ڏئي ٿو جنهن تي غلطي ٿي وئي، يا -1 جيڪڏهن پوزيشن نامعلوم ناهي.
  • طريقو String getPattern()هڪ غلط باقاعده اظهار ڏي ٿو.
اضافي طور تي، وراثت وارو طريقو String getMessage()هڪ ملٽي لائن اسٽرنگ کي واپس ڪري ٿو جيڪو قدرن سان گڏ اڳئين طريقن مان موٽايو ويو آهي ۽ هڪ بصري اشاري سان گڏ جتي نحو جي غلطي ٽيمپليٽ ۾ آئي آهي. نحو جي غلطي ڇا آهي؟ ھتي ھڪڙو مثال آھي: java RegexDemo (?itree Treehouse ھن صورت ۾، اسان کي وسرڻ وساريو آھي بند ڪرڻ واري قوس جي metacharacter ( )) nested flag expression ۾. اھو اھو آھي جيڪو ھن نقص مان نڪرندو آھي:
regex = (?itree
input = Treehouse
Неправильное регулярное выражение: Unknown inline modifier near index 3
(?itree
   ^
Описание: Unknown inline modifier
Позиция: 3
Неправильный шаблон: (?itree

Regex API استعمال ڪندي مفيد ريگيولر ايڪسپريشن ايپليڪيشنون ٺاهيو

باقاعده اظهار توهان کي طاقتور ٽيڪسٽ پروسيسنگ ايپليڪيشن ٺاهڻ جي قابل بڻائي ٿو. هن حصي ۾، اسين توهان کي ٻه ڪارائتيون ايپليڪيشنون ڏيکارينداسين جيڪي اميد سان توهان کي Regex API ڪلاس ۽ طريقن کي وڌيڪ ڳولڻ لاءِ همٿائيندا. ٻيو ضميمو متعارف ڪرايو آهي Lexan: هڪ ٻيهر استعمال لائق ڪوڊ لائبريري ليڪسيڪل تجزيو ڪرڻ لاءِ. جاوا ۾ باقاعده اظهار، حصو 4 - 3

باقاعده اظهار ۽ دستاويز

دستاويزي لازمي ڪمن مان هڪ آهي جڏهن پروفيشنل سافٽ ويئر ٺاهيندي. خوشقسمتيءَ سان، باقاعده اظهار توهان جي مدد ڪري سگھن ٿا دستاويز ٺاهڻ جي ڪيترن ئي حصن سان. لسٽنگ 1 ۾ ڪوڊ هڪ ماخذ فائل مان سنگل لائن ۽ ملٽي لائن سي طرز جي تبصرن تي مشتمل لائينون ڪڍي ٿو ۽ انهن کي ٻئي فائل ۾ لکي ٿو. ڪوڊ ڪم ڪرڻ لاءِ، تبصرا لازمي طور تي ساڳي لائن تي هجن. لسٽنگ 1. تبصرا حاصل ڪرڻ
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class ExtCmnt
{
   public static void main(String[] args)
   {
      if (args.length != 2)
      {
         System.err.println("Способ применения: java ExtCmnt infile outfile");
         return;
      }

      Pattern p;
      try
      {
         // Следующий шаблон определяет многострочные комментарии,
         // располагающиеся в одной строке (например, /* одна строка */)
            // и однострочные комментарии (например, // Howая-то строка).
            // Комментарий может располагаться в любом месте строки.

         p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
      }
      catch (PatternSyntaxException pse)
      {
         System.err.printf("Синтаксическая ошибка в регулярном выражении: %s%n", pse.getMessage());
         System.err.printf("Описание ошибки: %s%n", pse.getDescription());
         System.err.printf("Позиция ошибки: %s%n", pse.getIndex());
         System.err.printf("Ошибочный шаблон: %s%n", pse.getPattern());
         return;
      }

      try (FileReader fr = new FileReader(args[0]);
           BufferedReader br = new BufferedReader(fr);
           FileWriter fw = new FileWriter(args[1]);
           BufferedWriter bw = new BufferedWriter(fw))
      {
         Matcher m = p.matcher("");
         String line;
         while ((line = br.readLine()) != null)
         {
            m.reset(line);
            if (m.matches()) /* Должна соответствовать вся строка */
            {
               bw.write(line);
               bw.newLine();
            }
         }
      }
      catch (IOException ioe)
      {
         System.err.println(ioe.getMessage());
         return;
      }
   }
}
لسٽنگ 1 ۾ طريقو main()پھرين صحيح ڪمانڊ لائن نحو جي چڪاس ڪري ٿو ۽ پوءِ ھڪڙي ھڪڙي ۽ گھڻن-لائن واري تبصرن کي ھڪڙي طبقي اعتراض ۾ ڳولڻ لاءِ ٺهيل ھڪڙو باقاعده اظهار مرتب ڪري ٿو Pattern. جيڪڏهن ڪو به استثنا نه وڌايو ويو آهي PatternSyntaxException، طريقو main()ذريعو فائل کي کوليندو آهي، ٽارگيٽ فائل ٺاهي ٿو، هڪ ميچر حاصل ڪري ٿو ته هر لڪير کي نموني جي خلاف پڙهي، ۽ پوء سورس فائل لائن کي لڪير سان پڙهي. هر لڪير لاء، اهو هڪ تبصرو نموني سان ملائي ٿو. جيڪڏهن ڪامياب ٿيو، طريقو main()لکندو اسٽرنگ (هڪ نئين لائين جي پٺيان) ٽارگيٽ فائل ڏانهن (اسين مستقبل جاوا 101 سبق ۾ فائل I/O منطق کي ڍڪيندا سين). هيٺ ڏنل لسٽنگ 1 مرتب ڪريو: ان پٽ جي طور تي javac ExtCmnt.java فائل سان ايپليڪيشن کي هلائڻ ExtCmnt.java: java ExtCmnt ExtCmnt.java out توھان کي ھيٺ ڏنل نتيجا حاصل ڪرڻ گھرجي فائل آئوٽ ۾:
// Следующий шаблон определяет многострочные комментарии,
 // располагающиеся в одной строке (например, /* одна строка */)
    // и однострочные комментарии (например, // Howая-то строка).
    // Комментарий может располагаться в любом месте строки.
p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
    if (m.matches()) /* Должна соответствовать вся строка */
پيٽرن جي اسٽرنگ ۾ .*/\\*.*\\*/|.*//.*$، پائپ ميٽاچاريٽر |هڪ منطقي يا آپريٽر جي طور تي ڪم ڪري ٿو، اشارو ڪري ٿو ته ميچر کي ڏنل باقاعده ايڪسپريس جي کاٻي آپرينڊ کي استعمال ڪرڻ گهرجي ميچر ٽيڪسٽ ۾ ميچ ڳولڻ لاء. جيڪڏهن ڪو به ميلاپ نه آهي، ميچ ڪندڙ ٻئي ڳولا جي ڪوشش لاء ڏنل باقاعده اظهار جي تعمير مان صحيح آپرينڊ استعمال ڪندو آهي (ڪپڙيل گروپ ۾ قوس جي ميٽا اچارٽر پڻ هڪ منطقي آپريٽر ٺاهيندا آهن). جاوا ۾ باقاعده اظهار، حصو 5
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION