Усулҳои кор бо гурӯҳҳои забтшуда
Рамзи сарчашмаи барнома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
Мисоли синф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
Дар ин ҳолат, мо фаромӯш кардем, ки мета аломати қавсро ( )
) дар ифодаи парчами лона гузошташуда нишон диҳем. Ин аст он чизе ки аз ин хатогӣ ба даст меояд:
regex = (?itree
input = Treehouse
Неправильное регулярное выражение: Unknown inline modifier near index 3
(?itree
^
Описание: Unknown inline modifier
Позиция: 3
Неправильный шаблон: (?itree
Бо истифода аз API Regex барномаҳои муфиди ифодаи муқаррариро созед
Ифодаҳои муқаррарӣ ба шумо имкон медиҳанд, ки барномаҳои пуриқтидори коркарди матн эҷод кунед. Дар ин бахш, мо ба шумо ду барномаи қулайро нишон медиҳем, ки умедворем шуморо ба омӯзиши минбаъдаи дарсҳо ва усулҳои Regex API ташвиқ мекунанд. Замимаи дуюм Lexan-ро муаррифӣ мекунад: китобхонаи рамзҳои такрорӣ барои таҳлor лексикӣ.Ифодаҳо ва ҳуҷҷатҳои муқаррарӣ
Ҳуҷҷатгузорӣ яке аз вазифаҳои ҳатмӣ ҳангоми таҳияи нармафзори касбӣ мебошад. Хушбахтона, ифодаҳои муқаррарӣ метавонанд ба шумо дар бисёр ҷанбаҳои эҷоди ҳуҷҷатҳо кӯмак расонанд. Рамзи Рӯйхати 1 аз файли сарчашма сатрҳоеро, ки шарҳҳои яксаторӣ ва бисёрхатти C-ро дар бар мегиранд, ҷудо мекунад ва онҳоро ба файли дигар менависад. Барои кор кардани code, шарҳҳо бояд дар як сатр бошанд. Рӯйхат 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;
}
}
}
Усули main()
дар Рӯйхати 1 аввал дурустии синтаксиси сатри фармонро тафтиш мекунад ва сипас ифодаи муқаррариро тартиб медиҳад, ки барои ошкор кардани шарҳҳои яксара ва бисёрсатрӣ дар an objectи синф тарҳрезӣ шудааст Pattern
. Агар ягон истисно ба миён наояд PatternSyntaxException
, усул main()
файли сарчашмаро мекушояд, файли мавриди ҳадафро эҷод мекунад, мувофиқкунандаро барои мувофиқ кардани ҳар як сатри хондашуда бо намуна ба даст меорад ва сипас файли сарчашмаро сатр ба сатр мехонад. Барои ҳар як сатр он бо намунаи шарҳ мувофиқ аст. Агар муваффақ бошад, усул main()
сатрро (пас аз хати нав) ба файли мавриди ҳадаф менависад (мо мантиқи файли I/O-ро дар дарси ояндаи Java 101 фаро мегирем). Рӯйхати 1-ро ба таври зерин тартиб диҳед: javac ExtCmnt.java
Барномаро бо файл ExtCmnt.java
ҳамчун вуруд иҷро кунед: java ExtCmnt ExtCmnt.java out
Шумо бояд натиҷаҳои зеринро дар файл ба даст оред:
// Следующий шаблон определяет многострочные комментарии,
// располагающиеся в одной строке (например, /* одна строка */)
// и однострочные комментарии (например, // Howая-то строка).
// Комментарий может располагаться в любом месте строки.
p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
if (m.matches()) /* Должна соответствовать вся строка */
Дар сатри намуна .*/\\*.*\\*/|.*//.*$
, мета аломати қубур |
ҳамчун оператори мантиқии Ё амал мекунад ва нишон медиҳад, ки мувофиқаткунанда бояд операнди чапи сохтори ифодаи муқаррарии додашударо барои ёфтани мувофиқат дар матни мувофиқ истифода барад. Дар сурати мавҷуд набудани мувофиқат, мувофиқкунанда операнди дурусти сохтори ифодаи муқаррарии додашударо барои кӯшиши ҷустуҷӯи дигар истифода мебарад (мета аломатҳои қавс дар гурӯҳи гирифташуда инчунин оператори мантиқиро ташкил медиҳанд). Ифодаҳои муқаррарӣ дар Java, Қисми 5
GO TO FULL VERSION