Minta (Java Platform SE 7)
Egy szabályos kifejezés összeállított ábrázolása.
Egy karakterláncként megadott reguláris kifejezést először le kell fordítani ennek az osztálynak a példányába. A kapott minta felhasználható egy Matcher
objektum létrehozására, amely tetszőleges karaktersorozatokkal illeszthető
Így tipikus meghívási sorrend
Pattern p = Pattern.("a*b"); Matcher m = p.("aaaaab"); boolean b = m.();
A matches
metódust ez az osztály kényelmesen meghatározza, ha egy reguláris kifejezést csak egyszer használnak. Ez a módszer egy kifejezést állít össze, és egy bemeneti szekvenciát egyetlen invokációban illeszt hozzá. Az állítás
boolean b = Pattern.matches("a*b", "aaaaab");
egyenértékű a fenti három állítással, bár ismételt mérkőzések esetén kevésbé hatékony, mivel nem teszi lehetővé az összeállított minta újrafelhasználását.
Az ebbe az osztályba tartozó példányok változhatatlanok, és több egyidejű szál használata biztonságos. A Matcher
osztályú példányok nem biztonságosak ilyen használatra.
A reguláris kifejezésű konstrukciók összefoglalása
Visszavágás, menekülés és idézés
A visszavágó karakter (“\”) arra szolgál, hogy bemutassa a megszökött konstrukciókat, a a fenti táblázatot, valamint azokat a karaktereket idézi, amelyeket egyébként el nem épített konstrukciókként értelmeznének. Így a \\ kifejezés egyetlen visszavonással és \ {egy bal zárójelgel egyezik.
Hiba a visszavágás használata olyan ábécés karakterek előtt, amelyek nem jelölik a megszökött konstrukciót; ezeket a reguláris kifejezés nyelvének későbbi kiterjesztéseire fenntartjuk. Hátlapvonás használható egy nem ábécés karakter előtt, függetlenül attól, hogy ez a karakter egy el nem épített konstrukció része-e.
karakterláncokban, amelyek szabályos kifejezéseket képviselnek, hogy megvédjék őket a Java bytecode fordító értelmezésétől. A literál “\ b” karakterlánc például egy visszatérő karakterrel egyezik meg, ha reguláris kifejezésként értelmezzük, míg a “\\ b” egy szóhatárra. A “\ (hello \)” literál karakterlánc illegális és fordítási időbeli hibához vezet; A húr (hello) egyezéséhez a “\\ (hello \\)” karakterláncot kell használni.
Karakterosztályok
A karakterosztályok megjelenhetnek más karakterosztályokban, és az unió operátor (implicit) és a metszés operátor (& &). Az unió operátor olyan osztályt jelöl, amely minden karaktert tartalmaz, amely legalább az egyik operandus osztályába tartozik. A metszés operátor olyan osztályt jelöl, amely minden operandus osztályban szereplő karaktert tartalmazza.
A karakterosztály operátorainak elsőbbsége a következő, a legmagasabbtól a legalacsonyabbig:
1 Szó szerinti menekülés \ x 2 Csoportosítás 3 Tartomány az 4 Unió 5 kereszteződés ]
Ne feledje, hogy a karakterosztályon belül más metakarakterkészlet van érvényben, mint egy karakterosztály. Például a reguláris kifejezés. egy karakterosztályon belül elveszíti különleges jelentését, míg a kifejezés metacharaktert képez.
Vonalzárók
A vonalvégzők egy vagy két karakterből álló szekvenciák, amelyek a bemeneti karaktersorozat sorának végét jelölik. Az alábbiakat ismerjük fel vonalvégzőként:
Ha a UNIX_LINES
mód be van kapcsolva, akkor az egyetlen sorvégződtető új vonal karakter.
A reguláris kifejezés. illeszkedik bármely karakterhez, kivéve a sortagazót, hacsak nincs megadva a DOTALL
zászló.
Alapértelmezés szerint a reguláris kifejezések ^ és a $ figyelmen kívül hagyják a sorterminátorokat, és csak a teljes bemeneti szekvencia elején és végén egyeznek. Ha a MULTILINE
mód be van kapcsolva, akkor a ^ megegyezik a bemenet elején és bármely vonalzáró után, kivéve a bemenet végén. Amikor MULTILINE
módban van, a $ közvetlenül egy vonalzáró vagy a beviteli sorrend vége előtt egyezik.
Csoportok és rögzítés
Csoportszám
A rögzítő csoportokat úgy számozzuk meg, hogy megszámoljuk nyitó zárójelüket balról jobbra.Az ((A) (B (C))) kifejezésben például négy ilyen csoport van:
1 ((A) (B (C)))
2 (A)
3 (B (C))
4 (C)
A nulla csoport mindig a teljes kifejezést jelenti.
A rögzítő csoportokat azért nevezik el, mert egy mérkőzés során a bemeneti szekvencia minden egyes alcsoportja, amely megfelel egy ilyen csoportnak, mentésre kerül. A rögzített alszekvencia később felhasználható a kifejezésben, hátsó referencián keresztül, és lekérhető az illesztőtől is, miután az egyeztetési művelet befejeződött.
Csoportnév
A befogócsoporthoz hozzárendelhető egy “név”, egy megnevezett-elfogó csoport is, majd később a “név” visszahivatkozhat rá. A csoportnevek a következő karakterekből állnak. Az első karakternek betűnek kell lennie.
A megnevezett-elfogó csoportok száma továbbra is megegyezik a Csoportszámban leírtakkal.
A csoporthoz társított rögzített bemenet mindig az az alszekvencia, amellyel a csoport legutóbb megfelelt. Ha egy csoportot másodszor értékelnek a számszerűsítés miatt, akkor a korábban rögzített értéke, ha van ilyen, megmarad, ha a második értékelés sikertelen. Az “aba” karakterláncnak az (a (b)?) + Kifejezéssel való megfeleltetésével például a második csoport “b” -re áll. Az összes rögzített bevitelt minden mérkőzés elején elvetjük.
A (? betűvel kezdődő csoportok vagy tiszta, nem rögzítő csoportok, amelyek nem rögzítenek szöveget és nem számítanak bele a csoport összesített részébe, vagy elnevezett-rögzítő csoportok.
Unicode támogatás
Ez az osztály megfelel a 18. számú Unicode technikai szabvány 1. szintjének: Unicode szabályos kifejezés, valamint az RL2.1 kanonikus ekvivalensek.
Unicode menekülési szekvenciák, például \ u2014 a Java forráskódban a Java ™ nyelvspecifikáció 3.3 szakaszában leírtak szerint kerülnek feldolgozásra. Az ilyen menekülési szekvenciákat a reguláris kifejezés értelmezője is közvetlenül hajtja végre, hogy az Unicode menekülési lehetőségeket fájlokban vagy billentyűzeten olvasható kifejezésekben lehessen használni. Így a karakterláncok ” Bár a \ u2014 “és a” \\ u2014 “nem egyenlő, ugyanabba a mintába fordítanak, amely megegyezik a karakterrel a 0x2014 hexadecimális értékkel.
Az Unicode karakter a reguláris kifejezésben is megjeleníthető, ha Hex jelölése (hexadecimális kódpontérték) közvetlenül az \ x {…} konstruktumban leírtak szerint például egy U + 2011F kiegészítő karakter megadható \ x {2011F} néven, a \ uD840 \ uDD1F helyettes pár két egymást követő Unicode menekülési szekvenciája helyett.
Az Unicode parancsfájlokat, blokkokat, kategóriákat és bináris tulajdonságokat a \ p és \ P konstrukciókkal írjuk, mint a Perl-ben. \ p {prop} megegyezik, ha a bemenet rendelkezik prop tulajdonsággal, míg a \ P {prop} nem egyezik, ha a bemenet rendelkezik ezzel a tulajdonsággal.
A szkriptek, blokkok, kategóriák és bináris tulajdonságok egyaránt használhatók a karakterosztályon belül és kívül is.
A szkripteket vagy a Is
előtaggal adják meg, például a IsHiragana
mezőben, vagy a script
kulcsszó (vagy rövid formája sc
), mint script=Hiragana
vagy sc=Hiragana
.
Az Pattern
által támogatott szkriptnevek a UnicodeScript.forName
által elfogadott és definiált érvényes szkriptnevek.
A blokkokat a In
előtaggal adják meg, például a InMongolian
mezőben, vagy a block
(vagy rövid formája blk
), mint block=Mongolian
vagy blk=Mongolian
.
Az Pattern
által támogatott blokknevek a UnicodeBlock.forName
által elfogadott és definiált érvényes blokknevek.
A kategóriákat az opcionális Is
előtaggal lehet megadni: \p{L}
és \p{IsL}
az Unicode betűk kategóriáját jelöli. A szkriptekhez és blokkokhoz hasonlóan a kategóriákat a general_category
kulcsszó (vagy rövid formája gc
) használatával is megadhatjuk, mint a general_category=Lu
vagy gc=Lu
.
A támogatott kategóriák az Unicode Standard kategóriái a Character
osztály által megadott verzióban. A kategórianevek megegyeznek a szabványban megadottakkal, mind normatívak, mind informatívak.
A bináris tulajdonságokat a Is
előtaggal adják meg, mint a IsAlphabetic
.A Pattern
által támogatott bináris tulajdonságok
- ábécés
- ideográfiai
- betűk
- Kisbetűs
- Nagybetűs
- Titlecase
- Írásjelek
- Vezérlés
- White_Space
- Számjegy
- Hex_Digit
- Noncharacter_Code_Point
- Hozzárendelt
Az előre definiált karakterosztályok és a POSIX karakterosztályok összhangban vannak a C. melléklet: Az Unicode reguláris kifejezés kompatibilitási tulajdonságai, ha a UNICODE_CHARACTER_CLASS
jelző meg van adva.
Azok a kategóriák, amelyek úgy viselkednek, mint a java.lang.Character logikai ismethodname metódusok (kivéve az elavultakat), ugyanazon \ p {prop} szintaxison keresztül érhetők el, ahol a megadott tulajdonság javamethodname néven szerepel.
Összehasonlítás a Perl 5-szel
A Pattern
motor hagyományos NFA-alapú párosítást hajt végre rendezett váltakozással, ahogy a Perl 5-ben előfordul.
A Perl konstrukciói, amelyeket ez az osztály nem támogat:
Az ezen osztály által támogatott konstrukciók, de a Perl nem:
-
Karakterosztályú unió és metszéspont a leírás szerint fent.
Figyelemre méltó különbségek a Perl-től:
-
A Perl-ben az \ 1-től \ 9-ig mindig visszahivatkozásként értelmezzük; a 9-nél nagyobb hátsó perjel elkerült számot hátulról referenciaként kezeljük, ha legalább ennyi részkifejezés létezik, ellenkező esetben, ha lehetséges, oktális szökésként értelmezzük. Ebben az osztályban az oktális meneküléseknek mindig nullával kell kezdődniük. Ebben az osztályban az \ 1-től 9-ig mindig back referenciákként értelmezzük, és nagyobb számot fogadunk el back back referenciaként, ha a reguláris kifejezés ezen a pontján legalább annyi részkifejezés létezik, különben az elemző számokat dob le a számig kisebb vagy egyenlő a meglévő csoportok számával, vagy egy számjegyű.
-
Perl a g jelzővel olyan mérkőzést kér, amely ott folytatódik, ahol az utolsó mérkőzés abbamaradt. Ezt a funkciót hallgatólagosan a
Matcher
osztály biztosítja: Afind
metódus ismételt meghívásai ott folytatódnak, ahol az utolsó meccs abbahagyta, kivéve, ha az egyező visszaáll. -
A Perl-ben a kifejezés legfelső szintjén beágyazott jelzők befolyásolják az egész kifejezést. Ebben az osztályban a beágyazott zászlók mindig abban a pillanatban lépnek hatályba, amikor megjelennek, függetlenül attól, hogy a legfelső szinten vannak, vagy egy csoporton belül; ez utóbbi esetben a zászlók a csoport végén ugyanúgy helyreállnak, mint Perlben.
A reguláris kifejezés-konstrukciók viselkedésének pontosabb leírását lásd: A reguláris kifejezések elsajátítása, 3. kiadás, Jeffrey EF Friedl, O “Reilly és társai, 2006.