Alnan toparlar bilen işlemegiň usullary
Programmanyň deslapky kodyRegexDemo
usul jaňyny öz içine alýar m.group()
. Bu usul, tutulan toparlar bilen işlemäge gönükdirilen group()
synpyň birnäçe usullaryndan biridir :Matcher
-
Usul
int groupCount()
çözüji nagyşda tutulan toparlaryň sanyny yzyna gaýtaryp berýär. Bu san, tutuşlygyna nagşa gabat gelýän 0 sany ýörite topar toparyny göz öňünde tutmaýar. -
Usul
String group()
tapylan öňki oýnuň nyşanlaryny yzyna gaýtaryp berýär. Boş setiriň üstünlikli gözlegini habar bermek üçin bu usul boş setiri yzyna gaýtaryp berýär. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
String group(int group)
Usul, parametr bilen görkezilen topar belgisi tarapyndan düşürilen öňki tapylan nyşanlary yzyna gaýtaryp bermekden başga usul bilen öňki usula meňzeýärgroup
. Munuňgroup(0)
bilen deňdigine üns beriňgroup()
. Şablonda berlen san bilen tutulan topar ýok bolsa, usul kadadan çykma döredýärIndexOutOfBoundsException
. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
Usul
String group(String name)
, at topary tarapyndan düşürilen öňki oýnuň nyşanlaryny yzyna gaýtaryp berýär. Alnan toparyň ady şablonda ýok bolsa, kadadan çykma atylýarIllegalArgumentException
. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
.
groupCount()
Aşakdaky mysal usullaryň we usullaryň ulanylyşyny görkezýär 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));
Ecutionerine ýetiriş netijeleri:
3
0: abc
1: abc
2: bc
3: c
Gabat gelýän ýerleri kesgitlemegiň usullary
SynpMatcher
oýnuň başlangyç we ahyrky ýagdaýlaryny yzyna gaýtaryp berýän birnäçe usuly hödürleýär:
-
Usul,
int start()
öňki tapylan oýnuň başlangyç ýagdaýyny görkezýär. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
Usul
int start(int group)
öňki usula meňzeýär, ýöne nomeri parametr bilen kesgitlenen topar üçin tapylan öňki oýnuň başlangyç ýagdaýyny görkezýärgroup
. Şablonda berlen san bilen tutulan topar ýok bolsa, usul kadadan çykma döredýärIndexOutOfBoundsException
. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
Usul
int start(String name)
öňki usula meňzeýär, ýöne çagyrylan topar üçin tapylan öňki oýnuň başlangyç ýagdaýyny görkezýärname
. Alnan toparname
şablonda bolmasa, kadadan çykma atylýarIllegalArgumentException
. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
Usul,
int end()
öňki tapylan 1-nji oýnuň soňky gahrymanynyň ýagdaýyny görkezýär. Eger-de gabat gelýän oýun oýnamadyk bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
Usul
int end(int group)
öňki usula meňzeýär, ýöne parametr bilen görkezilen topar üçin tapylan öňki oýnuň ahyrky ýagdaýyny görkezýärgroup
. Şablonda berlen san bilen tutulan topar ýok bolsa, usul kadadan çykma döredýärIndexOutOfBoundsException
. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
. -
Usul
int end(String name)
öňki usula meňzeýär, ýöne çagyrylan topar üçin tapylan öňki oýnuň ahyrky ýagdaýyny görkezýärname
. Alnan toparname
şablonda bolmasa, kadadan çykma atylýarIllegalArgumentException
. Eger çözüji entek gözleg geçirmedik bolsa ýa-da öňki gözleg işi başa barmasa, kadadan çykma bolýarIllegalStateException
.
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();
}
Bu mysalyň netijesi aşakdakylar:
Найдено bc
начинается с позиции 1 и заканчивается на позиции 2
Найдено bc
начинается с позиции 4 и заканчивается на позиции 5
Найдено bc
начинается с позиции 7 и заканчивается на позиции 8
“PatternSyntaxException” synpynyň usullary
Synpyň mysalyPatternSyntaxException
adaty aňlatmada sintaksis ýalňyşlygyny suratlandyrýar. Usullardan compile()
we matches()
synpdan şeýle kadadan çykma çykarýar Pattern
we aşakdaky konstruktoryň üsti bilen emele gelýär: PatternSyntaxException(String desc, String regex, int index)
Bu konstruktor görkezilen beýany ( desc
), yzygiderli aňlatmany ( regex
) we sintaksis ýalňyşlygynyň ýüze çykan ýerini saklaýar. Sintaksis ýalňyşlygynyň ýerleşýän ýeri näbelli bolsa, bahasy index
kesgitlenýär -1
. Mümkin, size hiç wagt mysal döretmeli bolmaz PatternSyntaxException
. Şeýle-de bolsa, formatlanan säwlik habary döredilende ýokardaky bahalary çykarmaly bolarsyňyz. Munuň üçin aşakdaky usullary ulanyp bilersiňiz:
- Usul
String getDescription()
sintaksis ýalňyşlygynyň beýanyny berýär. - Usul
int getIndex()
ýa-da ýalňyşlygyň ýüze çykan ýerini ýa-da ýagdaýy näbelli bolsa -1 görkezýär. - Usul
String getPattern()
nädogry yzygiderli aňlatmany görkezýär.
String getMessage()
şablonda sintaksis ýalňyşlygynyň nirede ýüze çykandygyny wizual görkezmek bilen öňki usullardan gaýtarylan bahalar bilen köp setirli setiri gaýtaryp berýär. Sintaksis säwligi näme? Ine bir mysal: Bu ýagdaýda, baýdak aňlatmasynda java RegexDemo (?itree Treehouse
ýapylýan gabygyň metacharacter () -ni görkezmegi ýatdan çykardyk . )
Bu ýalňyşlygyň netijesi:
regex = (?itree
input = Treehouse
Неправильное регулярное выражение: Unknown inline modifier near index 3
(?itree
^
Описание: Unknown inline modifier
Позиция: 3
Неправильный шаблон: (?itree
Regex API ulanyp, peýdaly yzygiderli aňlatma programmalaryny guruň
Yzygiderli aňlatmalar güýçli tekst işleýiş programmalaryny döretmäge mümkinçilik berýär. Bu bölümde size Regex API synplaryny we usullaryny has giňişleýin öwrenmäge höweslendirer diýip umyt edýän iki sany amatly programmany görkezeris. Ikinji goşundy Lexan bilen tanyşdyrýar: leksiki derňew geçirmek üçin gaýtadan ulanylýan kod kitaphanasy.Yzygiderli aňlatmalar we resminamalar
Professional programma üpjünçiligi işlenip düzülende resminamalaşdyrmak hökmany meseleleriň biridir. Bagtymyza, yzygiderli aňlatmalar resminamalary döretmegiň köp tarapy bilen kömek edip biler. 1-nji sanawdaky kod, bir faýldan bir setirli we köp setirli C görnüşli düşündirişleri öz içine alýan setirleri çykarýar we başga bir faýla ýazýar. Kodyň işlemegi üçin teswirler bir setirde bolmaly. Sanaw 1. Teswirleri almakimport 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;
}
}
}
“Listing 1” usuly main()
ilki bilen buýruk setiriniň sintaksisini barlaýar we soňra bir we köp setirli teswirleri synp obýektine kesgitlemek üçin döredilen yzygiderli aňlatmany düzýär Pattern
. Hiç hili kadadan çykma ýok bolsa PatternSyntaxException
, usul main()
çeşme faýlyny açýar, maksatly faýly döredýär, nagyş bilen okalýan her setire gabat gelýän matç alýar we soňra çeşme faýl setirini setir boýunça okaýar. Her setir üçin düşündiriş nagşy bilen gabat gelýär. Üstünlikli bolsa, usul main()
setiri (soňra täze setir bilen) nyşan faýlyna ýazýar (geljekde Java 101 okuw gollanmasynda I / O logika faýlyny ýaparys). 1-nji sanawy düzüň: javac ExtCmnt.java
Programmany ExtCmnt.java
giriş hökmünde faýl bilen işlediň: java ExtCmnt ExtCmnt.java out
Aşakdaky netijeleri faýlda almaly:
// Следующий шаблон определяет многострочные комментарии,
// располагающиеся в одной строке (например, /* одна строка */)
// и однострочные комментарии (например, // Howая-то строка).
// Комментарий может располагаться в любом месте строки.
p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
if (m.matches()) /* Должна соответствовать вся строка */
Nusga setirinde .*/\\*.*\\*/|.*//.*$
, turba metacharacter |
logiki OR ýa-da operator hökmünde çykyş edýär, bu matçeriň gabat gelýän tekstde gabat gelmek üçin berlen yzygiderli aňlatma gurluşynyň çep operanyny ulanmalydygyny görkezýär. Gabat gelmeýän bolsa, gözlegçi başga bir gözleg synanyşygy üçin berlen yzygiderli aňlatma konstruksiýasyndan dogry operand ulanýar (tutulan topardaky gabygyň metacharacterleri hem logiki operator döredýär). Java-da yzygiderli aňlatmalar, 5-nji bölüm
GO TO FULL VERSION