Jeff Frieseniň javaworld web sahypasy üçin ýazan Java-da yzygiderli aňlatmalar üçin gysga gollanmanyň terjimesini size hödürleýäris . Okamagyň aňsatlygy üçin makalany birnäçe bölege böldük.
Java-da yzygiderli aňlatmalar, 1-nji bölüm
Birnäçe diapazony birleşdirmek |
Birnäçe diapazony bir gapdala ýerleşdirip, bir aralyk nyşan synpyna birleşdirip bilersiňiz. Mysal üçin, synp [a-zA-Z] aşaky ýa-da baş harp bilen latyn elipbiýiniň ähli nyşanlaryna gabat gelýär. |
Birnäçe diapazony birleşdirmek
Birnäçe diapazony bir gapdala ýerleşdirip, bir aralyk nyşan synpyna birleşdirip bilersiňiz. Mysal üçin, synp
[a-zA-Z]
aşaky ýa-da baş harp bilen latyn elipbiýiniň ähli nyşanlaryna gabat gelýär.
Nyşan synplaryny birleşdirmek
Nyşanlar synpy birleşýän birnäçe nyşanlardan ybarat bolup, emele gelen birleşigiň ähli nyşanlaryna gabat gelýär. Mysal üçin, synpdan başlap , başdaky nyşanlara
[a-d[m-p]]
gabat gelýär . Aşakdaky mysaly gözden geçiriň: Bu mysalda gabat gelýän nyşanlary we , we nyşanlary tapar :
a
d
m
p
java RegexDemo [ab[c-e]] abcdef
a
b
c
d
e
abcdef
regex = [ab[c-e]]
input = abcdef
Found [a] starting at 0 and ending at 0
Found [b] starting at 1 and ending at 1
Found [c] starting at 2 and ending at 2
Found [d] starting at 3 and ending at 3
Found [e] starting at 4 and ending at 4
Nyşanlaryň kesişmesi
Nyşan synplarynyň kesişmesi, ähli höwürtgelenen synplara mahsus nyşanlardan durýar we diňe umumy nyşanlara gabat gelýär. Mysal üçin , synp
[a-z&&[d-f]]
nyşanlara gabat gelýär
d
we
e
.
f
Aşakdaky mysaly gözden geçiriň:
java RegexDemo "[aeiouy&&[y]]" party
Windows operasiýa ulgamymda goşa dyrnagyň hökmanydygyny belläň, sebäbi buýruk gabygy olara
&
buýruk bölüji hökmünde seredýär.
y
Bu mysal diňe gabat gelýän häsiýeti tapar
party
:
regex = [aeiouy&&[y]]
input = party
Found [y] starting at 4 and ending at 4
Nyşan sapaklaryny aýyrmak
Nyşan synplaryny aýyrmak, içerki nyşan synplaryndan başga ähli nyşanlardan durýar we diňe galan nyşanlara gabat gelýär. Mysal üçin, synpdan başlap , aşakdaky
[a-z&&[^m-p]]
nyşanlara gabat gelýär : Bu mysalda nyşanlary tapar we munuň üçin gabat gelýänler bar :
a
l
q
z
java RegexDemo "[a-f&&[^a-c]&&[^e]]" abcdefg
d
f
abcdefg
regex = [a-f&&[^a-c]&&[^e]]
input = abcdefg
Found [d] starting at 3 and ending at 3
Found [f] starting at 5 and ending at 5
Öňünden kesgitlenen nyşan synplary
Käbir nyşan synplary , stenografiýa belligini ulanmagy esaslandyrmak üçin
yzygiderli aňlatmalarda ýeterlik bolýar . Bu synp
Pattern
şeýle gysgaltmalar ýaly öňünden kesgitlenen nyşanlary hödürleýär. Olary yzygiderli aňlatmalaryňyzy aňsatlaşdyrmak we sintaksis ýalňyşlyklaryny azaltmak üçin ulanyp bilersiňiz. Öňünden kesgitlenen nyşanlaryň birnäçe kategoriýasy bar:
java.lang.Character
skript, blok, kategoriýa we ikilik ýaly standart, POSIX we icunikod häsiýetleri. Aşakdaky sanawda diňe standart synplaryň kategoriýasy görkezilýär:
\d
: San. Ekwiwalent [0-9]
.
\D
: San däl häsiýet. Ekwiwalent [^0-9]
.
\s
: Uly giňişlik Ekwiwalent [ \t\n\x0B\f\r]
.
\S
: Ak giňişlik däl. Ekwiwalent [^\s]
.
\w
: Söz ýasaýjy nyşan. Ekwiwalent [a-zA-Z_0-9]
.
\W
: Söz döredýän häsiýet däl. Ekwiwalent [^\w]
.
Aşakdaky mysal
\w
giriş tekstindäki ähli söz nyşanlaryny suratlandyrmak üçin öňünden kesgitlenen nyşan synpyny ulanýar:
java RegexDemo \w "aZ.8 _"
Döwrüň we giňişlik nyşanlarynyň söz nyşanlary hasaplanmaýandygyny görkezýän aşakdaky ýerine ýetiriş netijelerine üns beriň:
regex = \w
input = aZ.8 _
Found [a] starting at 0 and ending at 0
Found [Z] starting at 1 and ending at 1
Found [8] starting at 3 and ending at 3
Found [_] starting at 5 and ending at 5
Çyzyk bölüjiler |
SDK synp resminamalary Pattern nokat metacharacterini, setir bölüjilerinden başga (setiriň soňuny bellän bir ýa-da iki simwol yzygiderliligi) öňünden kesgitlenen nyşan synpy hökmünde suratlandyrýar. Kadadan çykma nokat re modeimi (indiki ara alyp maslahatlaşarys), nokatlar çyzyk bölüjilerine hem gabat gelýär. Synp Pattern aşakdaky setir bölüjileri tapawutlandyrýar:
- wagonyň yzyna gaýtaryş belgisi (
\r );
- täze setir belgisi (kagyzy bir setir öňe sürmegiň nyşany) (
\n );
- derrew täze setir belgisi (
\r\n );
- indiki setir belgisi (
\u0085 );
- setir bölüji nyşan (
\u2028 );
- abzas bölüji nyşan (
\u2029 )
|
Alnan toparlar
Surata alýan topar, nagyş boýunça gözlenende has köp ulanmak üçin tapylan nyşanlaryň toplumyny saklamak üçin ulanylýar. Bu konstruksiýa, gabygyň () metacharacter-de ýerleşdirilen nyşanlaryň yzygiderliligidir
( )
. Alnan toparyň içindäki ähli nyşanlar, nagyş boýunça gözlenende bitewi hasaplanýar. Mysal üçin, surata düşüriş topary ( )
Java
harplary birleşdirýär we bir birlige bölýär
J
. Bu surata düşüriş topary , giriş tekstindäki nagşyň ähli hadysalaryny tapýar . Her bir oýun bilen öňki saklanan nyşanlar indiki harplar bilen çalşyrylýar. Alnan toparlar beýleki tutulan toparlaryň içinde höwürtge döredip biler. Mysal üçin, yzygiderli aňlatmada bir topar bir toparyň içinde höwürtge döredýär . Her bir höwürtgelenen ýa-da höwürtgelemeýän topara 1-den başlap san berilýär we san belgisi çepden saga geçýär. Öňki mysalda, 1-nji topara düşýän gabat gelýänler we 2-nji topara düşýän toparlar gabat gelýär. Adaty aňlatmada , 1-nji topara düşýär we 2-nji topara düşürilýär. Yza çekilen nyşan hökmünde görkezilen toparyň sanyna gabat gelýän san belgisi hökmünde görkezilen, arka ýazgy, topar tarapyndan alnan tekstdäki nyşanlara ýüzlenmäge mümkinçilik berýär. Arka baglanyşygyň bolmagy, gabat gelýän adamyň, alnan san boýunça alnan toparyň saklanan gözleg netijesine salgylanmagyna sebäp bolýar we soňra gözleg üçin şol netijedäki nyşanlary ulanýar. Aşakdaky mysal tekstdäki grammatiki ýalňyşlyklary tapmak üçin yzky salgylanmanyň ulanylyşyny görkezýär: Bu mysal giriş tekstinde derrew yzarlanylýan dublikat söz bilen grammatiki ýalňyşlygy tapmak üçin yzygiderli aňlatmany ulanýar . Bu yzygiderli aňlatma, iki sany topary kesgitleýär: 1-nji belgili , 2-nji belgä we yzyndaky kosmos nyşanyna laýyk gelýär . Yzky salgylanma, 2-nji toparyň saklanan netijesini täzeden gözden geçirmäge mümkinçilik berýär, şeýlelik bilen kosmosyň ikinji gezek ýüze çykmagyny , bir giňişlik ilkinji gezek ýüze çykan badyna derrew we . Duşuşygyň netijeleri aşakdakylar:
a
v
a
Java
Java
(Java( language))
(language)
(Java)
(Java( language))
(language)
(a)(b)
(a)
(b)
java RegexDemo "(Java( language)\2)" "The Java language language"
(Java( language)\2)
language
Java
"The Java language language"
(Java( language)\2)
Java language language
(language)
language
\2
language
language
RegexDemo
regex = (Java( language)\2)
input = The Java language language
Found [Java language language] starting at 4 and ending at 25
Serhet gabat gelýänler
Käwagt bir setiriň başynda, söz araçäklerinde, tekstiň ahyrynda we ş.m.
Pattern
Aşakdaky ýerlerde gabat gelýänleri gözleýän yzygiderli aňlatma gurluşlary bolan synp gyrasy gabat gelýänleriň birini ulanyp bilersiňiz :
^
: Setiriň başlangyjy;
$
: Setiriň soňy;
\b
: Söz araçägi;
\B
: Pseudoword araçägi;
\A
: Tekstiň başlangyjy;
\G
: Öňki oýnuň soňy;
\Z
: Yzky setir bölüjisini goşmazdan tekstiň soňy (bar bolsa);
\z
: Tekstiň soňy
Aşakdaky mysal, nol ýa-da has köp söz belgisi
^
bilen başlanýan, soňundan nol ýa-da has köp söz nyşanlaryny tapmak üçin araçäk gabat gelýän metacharacter ulanýar: Nyşan giriş tekstiniň ilkinji üç simwolynyň yzygiderli nagyş nyşanlaryna laýyk gelmelidigini we islendik san bilen yzarlap boljakdygyny kesgitleýär . söz emele getirýän nyşanlardan. Ine, ýerine ýetirişiň netijesi:
The
java RegexDemo "^The\w*" Therefore
^
T
h
e
regex = ^The\w*
input = Therefore
Found [Therefore] starting at 0 and ending at 8
Buýruk setirini üýtgedeniňizde näme bolýar
java RegexDemo "^The\w*" " Therefore"
? Hiç hili gabat gelmez, sebäbi
Therefore
giriş teksti kosmos nyşanyndan öň.
Uzynlyk nol
Käwagt, gyralar bilen işleýän wagtyňyz nol uzynlykdaky gabatlaşmalara duşarsyňyz.
Совпадение нулевой длины
nyşanlary öz içine almaýan gabat gelýär. Boş giriş tekstinde, giriş tekstiniň başynda, giriş tekstiniň soňky nyşanyndan we giriş tekstiniň islendik iki simwolynyň arasynda bolup biler. Nol uzynlykdaky oýunlary tanamak aňsat, sebäbi olar hemişe şol bir ýagdaýda başlaýar we gutarýar. Aşakdaky mysaly gözden geçiriň:
java RegExDemo \b\b "Java is"
Bu mysal yzygiderli iki söz araçägini gözleýär we netijeler şuňa meňzeýär:
regex = \b\b
input = Java is
Found [] starting at 0 and ending at -1
Found [] starting at 4 and ending at 3
Found [] starting at 5 and ending at 4
Found [] starting at 7 and ending at 6
Netijelerde birnäçe nol uzynlykdaky oýunlary görýäris. Bu ýerdäki ahyrky pozisiýalar başlangyç pozisiýalardan az, sebäbi
RegexDemo
1-nji sanawda deslapky kodda görkezdim
end() – 1
.
Mukdarlar
Hasaplaýjy, nagşy san bahasy bilen aç-açan ýa-da aç-açan baglanyşdyrýan yzygiderli aňlatma gurluşydyr. Bu san bahasy nagşy näçe gezek gözlemelidigini kesgitleýär. Mukdarlar açgöz, ýalta we aşa açgözlere bölünýär:
- Açgöz mukdar (
?
ýa *
-da +
) iň uzyn oýny tapmak üçin döredildi. Sorap bilerinmi X
? bir ýa-da az hadysany tapmak X
, X*
nol ýa-da has köp hadysany tapmak X
, X+
bir ýa-da birnäçe hadysany tapmak X
, hadysalary X{n}
tapmak , iň bolmanda (we ähtimal has köp) hadysany tapmak we iň bolmanda has köp hadysany tapmak .n
X
X{n,}
n
X
X{n,m}
n
m
X
- Yalta mukdar (
??
ýa *?
-da +?
) iň gysga oýny tapmak üçin döredildi. X??
Bir ýa-da az hadysany gözlemek üçin kesgitläp bilersiňiz X
, X*
? nol ýa-da has köp hadysany tapmak X
, X+?
bir ýa-da birnäçe hadysany tapmak X
, hadysalary X{n}?
tapmak , iň bolmanda (we has ähtimal) hadysalary tapmak we iň bolmanda hadysalardan köp däl tapmak .n
X
X{n,}?
n
X
X{n,m}?
n
m
X
- Örän açgöz mukdar (
?+
ýa *+
-da ++
) açgöz mukdarda kesgitleýjä meňzeýär, aşa açgöz mukdar kesgitleýji diňe iň uzyn oýny tapmaga synanyşýar, açgöz mukdar bolsa birnäçe synanyşyk edip biler. X?+
Bir ýa-da az hadysany tapmak X
, X*+
nol ýa-da has köp hadysany tapmak X
, X++
bir ýa-da birnäçe hadysany tapmak X
, ýüze çykanlary X{n}+
tapmak , iň bolmanda (we ähtimal has köp) hadysalary tapmak we iň bolmanda hadysalardan köp tapmak üçin düzülip bilner. .n
X
X{n,}+
n
X
X{n,m}+
n
m
X
Aşakdaky mysal açgöz mukdaryň ulanylyşyny görkezýär:
java RegexDemo .*ox "fox box pox"
Ine netijeler:
regex = .*ox
input = fox box pox
Found [fox box pox] starting at 0 and ending at 10
Açgöz mukdar (
.*
) gutarýan nyşanlaryň iň uzyn yzygiderliligini tapýar
ox
. Giriş tekstiniň hemmesini sarp edýär we giriş tekstiniň bu simwollar bilen gutarýandygyny anyklaýança yzyna gaýdýar. Geliň indi ýalta mukdaryna seredeliň:
java RegexDemo .*?ox "fox box pox"
Netijeleri:
regex = .*?ox
input = fox box pox
Found [fox] starting at 0 and ending at 2
Found [ box] starting at 3 and ending at 6
Found [ pox] starting at 7 and ending at 10
Yalta mukdar (
.*?
) gutarýan nyşanlaryň iň gysga yzygiderliligini tapýar
ox
. Boş setirden başlaýar we gabat gelýänçä simwollary ýuwaş-ýuwaşdan sarp edýär. Soň bolsa giriş teksti gutarýança işlemegini dowam etdirýär. Ahyrynda, aşa açgöz mukdaryna seredeliň:
java RegexDemo .*+ox "fox box pox"
Ine, onuň netijeleri:
regex = .*+ox
input = fox box pox
Artykmaç açgöz mukdar (
.*+
) gabat gelýänleri tapmaýar, sebäbi ähli giriş tekstini sarp edýär we
ox
adaty aňlatmanyň soňunda gabat gelýän zat galmaýar. Açgöz mukdardan tapawutlylykda, aşa açgöz mukdar yza gaýdyp gelmeýär.
Uzynlyk nol
Käwagt kesgitleýjiler bilen işlän wagtyňyz nol uzynlykdaky gabatlaşmalara duşarsyňyz. Mysal üçin, aşakdaky açgöz ölçegçini ulanmak birnäçe nol uzynlykdaky netijelere getirýär:
java RegexDemo a? abaa
Bu mysaly işletmegiň netijeleri:
regex = a?
input = abaa
Found [a] starting at 0 and ending at 0
Found [] starting at 1 and ending at 0
Found [a] starting at 2 and ending at 2
Found [a] starting at 3 and ending at 3
Found [] starting at 4 and ending at 3
Executionerine ýetiriş netijelerinde bäş oýun bar. Birinji, üçünji we dördünji garaşylsa-da (üç harpyň pozisiýasyna laýyk gelýär
a
)
abaa
, ikinji we bäşinji sizi geň galdyryp biler. Tekstiň soňuna
a
gabat gelýän zady görkezýän ýaly , ýöne aslynda beýle däl.
b
Adaty aňlatma tekstiň ahyrynda
a?
gözlemeýär .
b
Barlygyny ýa-da ýoklugyny gözleýär
a
. Tapylmasa
a?
,
a
nol uzynlykdaky oýun hökmünde habar berýär.
Baýdak aňlatmalary
Matçerler adaty aňlatmany bir nagyşa düzenlerinde ýok edip boljak käbir çaklamalary öňe sürýärler. Bu meseläni soňrak ara alyp maslahatlaşarys. Yzygiderli aňlatma, ýerleşdirilen baýdak aňlatmasyny ulanyp, islendik defoltlary ýok etmäge mümkinçilik berýär. Bu yzygiderli aňlatma gurluşy, sorag belgisiniň metacharacter (
?
) töwereginde gabygyň metacharacter hökmünde kesgitlenýär, soňra kiçi harp latyn harpy bilen görkezilýär. Synp
Pattern
aşakdaky baýdak aňlatmalaryna düşünýär:
(?i)
: Case duýgur nagyş gabat gelmegini üpjün edýär. Mysal üçin, buýruk ulanylanda java RegexDemo (?i)tree Treehouse
nyşanlaryň yzygiderliligi Tree
nagşa laýyk gelýär tree
. Dymmaklyk, kese duýgur nagyş gözlegidir.
(?x)
: Nusgadaky metacharacter-den başlap, giňişlikdäki nyşanlary we düşündirişleri ulanmaga rugsat berýär #
. Matçer ikisine-de üns bermez. Mysal üçin, java RegexDemo ".at(?x)#match hat, cat, and so on" matter
nyşanlaryň yzygiderliligi mat
nagşa laýyk gelýär .at
. Düzgüne görä, giňişlikdäki nyşanlara we düşündirişlere rugsat berilmeýär we gabat gelýän adam gözleg işine gatnaşýan gahrymanlar hökmünde garaýar.
(?s)
: Dotall re modeimini açýar, onda nokat metacharacter beýleki nyşanlara goşmaça çyzyk bölüjilerine gabat gelýär. Mysal üçin, buýruk java RegexDemo (?s). \n
täze setir belgisini tapar. Dymmaklyk nokadyň tersidir: çyzyk bölüjiler tapylmaz. Mysal üçin, buýruk Java RegexDemo . \n
täze setir belgisini tapmaz.
(?m)
^
: Her setiriň başyna we $
soňuna gabat gelýän köp ugurly re modeimi işledýär . Mysal üçin, java RegexDemo "(?m)^abc$" abc\nabc
giriş tekstinde iki yzygiderliligi tapýar abc
. Düzgüne görä, bir setirli re modeim ulanylýar: ^
giriş tekstiniň başyna gabat gelýär we $
soňuna gabat gelýär. Mysal üçin, java RegexDemo "^abc$" abc\nabc
gabat gelmeýän jogap berýär.
(?u)
: “Unicode” duýgur korpusy deňleşdirmäge mümkinçilik berýär. Bu baýdak, bilelikde ulanylanda (?i)
, icunikod standartyna laýyklykda kese duýgur nagyş gabat gelmäge mümkinçilik berýär. Bellenen sazlama, diňe kese duýgur we US-ASCII nyşanlary gözlemekdir.
(?d)
: Unix stilindäki setir re modeimini açýar, bu ýerde gabat gelýän kontekstdäki metacharacterleri .
we diňe setir bölüjisini tanadýar . Dymmaklyk Unix däl stil setir tertibi: gabat gelýän ýokardaky metacharacterleriň çäginde ähli setir bölüjileri ykrar edýär.^
$
\n
Öýlenen baýdak aňlatmalary, tutulan toparlara meňzeýär, sebäbi olaryň nyşanlary gabygyň metacharacterleri bilen gurşalan. Alnan toparlardan tapawutlylykda, ýerleşdirilen baýdak aňlatmalary, tekst nyşanlaryny tutmaýan yzygiderli aňlatma gurluşy bolan, tutulmadyk toparlaryň mysalydyr. Gaplaňlaryň metacharacterleri bilen gurşalan nyşanlaryň yzygiderliligi hökmünde kesgitlenilýär.
Birnäçe öýjükli baýdak aňlatmalaryny görkezmek |
Birnäçe öýjükli baýdak aňlatmalaryny yzygiderli aňlatmak arkaly ýa-da gapdalda ( (?m)(?i)) ) ýa-da yzygiderli kesgitleýän harplary ýerleşdirmek arkaly kesgitlemek bolýar (?mi) . |
Netije
Şu wagta çenli düşünşiňiz ýaly, yzygiderli aňlatmalar gaty peýdaly we sintaksisiň nuanslaryny özleşdireniňizde has peýdaly bolýar. Şu wagta çenli sizi yzygiderli aňlatmagyň esaslary we
Pattern
. 2-nji bölümde, Regex API-ä has çuňňur serederis we usullaryny
Pattern
öwreneris
Matcher
we
PatternSyntaxException
. Şeýle hem, programmalaryňyzda derrew ulanyp boljak Regex API-iň iki amaly programmasyny görkezerin.
Java-da yzygiderli aňlatmalar, 3-nji bölüm Java-da yzygiderli aňlatmalar, 4-nji bölüm Java-da yzygiderli aňlatmalar, 5-nji bölüm
GO TO FULL VERSION