گرفتار ٿيل گروپن سان ڪم ڪرڻ جا طريقا
ايپليڪيشن جو سورس ڪوڊ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
ميچ جي پوزيشن کي طئي ڪرڻ لاء طريقا
ڪلاس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
.
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: هڪ ٻيهر استعمال لائق ڪوڊ لائبريري ليڪسيڪل تجزيو ڪرڻ لاءِ.باقاعده اظهار ۽ دستاويز
دستاويزي لازمي ڪمن مان هڪ آهي جڏهن پروفيشنل سافٽ ويئر ٺاهيندي. خوشقسمتيءَ سان، باقاعده اظهار توهان جي مدد ڪري سگھن ٿا دستاويز ٺاهڻ جي ڪيترن ئي حصن سان. لسٽنگ 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
GO TO FULL VERSION