Kita nggawa menyang manungsa waé terjemahan saka panuntun singkat kanggo ungkapan biasa ing basa Jawa, ditulis dening Jeff Friesen kanggo situs web
JavaWorld . Kanggo gampang maca, kita wis dibagi artikel dadi sawetara bagean.
Nggunakake API Ekspresi Reguler ing Program Jawa kanggo Ngenali lan Nggambarake Pola
Karakter Jawa lan macem-macem jinis data string nyedhiyakake dhukungan tingkat rendah kanggo cocog pola, nanging nggunakake kanggo tujuan iki biasane nambah kerumitan kode sing signifikan. Kode sing luwih prasaja lan luwih apik dipikolehi kanthi nggunakake Regex API ("Regular Expression API"). Tutorial iki bakal mbantu sampeyan miwiti nganggo ekspresi reguler lan Regex API. Pisanan kita bakal ngrembug telung kelas paling menarik ing paket ing umum
java.util.regex
, lan banjur njupuk dipikir nang kelas
Pattern
lan njelajah dibangun pola-cocog sawijining canggih.
manungsa waé: Sampeyan bisa ngundhuh kode sumber (digawe dening Jeff Friesen kanggo situs JavaWorld) aplikasi demo saka artikel iki
saka kene .
Apa ekspresi reguler?
Ekspresi reguler (ekspresi reguler / regex / regexp) yaiku senar sing minangka pola sing nggambarake serangkaian senar tartamtu. Pola nemtokake larik endi sing kalebu ing set kasebut. Pola kasebut dumadi saka aksara literal lan metakarakter—karakter kanthi makna khusus tinimbang makna harfiah. Pencocokan pola yaiku telusuran teks kanggo nemokake sing cocog, yaiku, senar sing cocog karo pola ekspresi biasa. Jawa ndhukung pencocokan pola liwat API Regex. API iki kasusun saka telung kelas:
Pattern
,
Matcher
lan
PatternSyntaxException
, dumunung ing paket
java.util.regex
:
- obyek kelas
Pattern
, uga disebut cithakan, dikompilasi ekspresi reguler.
- obyek kelas
Matcher
, utawa matchers, iku mekanisme interpretasi pola kanggo nemokake cocog ing urutan karakter (obyek kang kelas ngleksanakake antarmuka java.lang.CharSequence
lan dadi sumber teks).
- Objek kelas
PatternSyntaxException
digunakake kanggo njlèntrèhaké pola ekspresi reguler sing ora bener.
Jawa uga nyedhiyakake dhukungan kanggo pencocokan pola liwat macem-macem metode
java.lang.String
. Contone, fungsi kasebut mung
boolean matches (String regex)
bali
true
yen senar panggilan cocog karo ekspresi reguler
regex
.
Metode Trep |
matches() lan cara penak expression-oriented biasa saka kelas String dipun ginakaken ing hood ing cara sing padha kanggo Regex API. |
RegexDemo
Aku nggawe aplikasi
RegexDemo
kanggo nduduhake ekspresi reguler Jawa lan macem-macem cara saka
Pattern
,
Matcher
lan
PatternSyntaxException
. Ing ngisor iki kode sumber kanggo aplikasi demo iki. Listing 1. Demonstrasi ekspresi reguler
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class RegexDemo
{
public static void main(String[] args)
{
if (args.length != 2)
{
System.err.println("usage: java RegexDemo regex input");
return;
}
args[1] = args[1].replaceAll("\\\\n", "\n");
try
{
System.out.println("regex = " + args[0]);
System.out.println("input = " + args[1]);
Pattern p = Pattern.compile(args[0]);
Matcher m = p.matcher(args[1]);
while (m.find())
System.out.println("Found [" + m.group() + "] starting at "
+ m.start() + " and ending at " + (m.end() - 1));
}
catch (PatternSyntaxException pse)
{
System.err.println("Неправильное регулярное выражение: " + pse.getMessage());
System.err.println("Описание: " + pse.getDescription());
System.err.println("Позиция: " + pse.getIndex());
System.err.println("Неправильный шаблон: " + pse.getPattern());
}
}
}
Bab pisanan sing ditindakake metode
main
kelas
RegexDemo
yaiku mriksa baris perintah. Mbutuhake rong argumen: sing pisanan yaiku ekspresi reguler, lan sing kapindho yaiku teks input sing ekspresi reguler bakal digoleki. Sampeyan bisa uga kudu nggunakake karakter baris anyar ing teks input
(\n)
. Iki mung bisa ditindakake kanthi nemtokake karakter
\
sing diikuti karakter kasebut
n
. Fungsi kasebut
main()
ngowahi urutan karakter iki dadi nilai Unicode 10.
Sebagéyan gedhé kode kasebut
RegexDemo
dilampirake ing
try-catch
. Blok
try
pisanan ngasilake ekspresi reguler lan teks input sing diwenehake, banjur nggawe obyek
Pattern
sing nyimpen ekspresi reguler sing dikompilasi (ekspresi reguler dikompilasi kanggo nambah kinerja pencocokan pola). A matcher diekstrak saka obyek
Pattern
lan digunakake kanggo nggoleki pertandhingan kanthi iteratif nganti kabeh ditemokake. Blok kasebut
catch
nelpon sawetara metode kelas
PatternSyntaxException
kanggo njupuk informasi sing migunani babagan pengecualian kasebut. Informasi iki sacara sequentially output menyang stream output. Ora perlu ngerti rincian babagan cara kode kasebut: bakal dadi jelas nalika sinau API ing bagean kapindho artikel kasebut. Nanging, sampeyan kudu ngumpulake Listing 1. Njupuk kode saka Listing 1, banjur ketik printah ing ngisor iki ing command prompt kanggo ngumpulake
RegexDemo
:
javac RegexDemo.java
Kelas Pola lan konstruk
Kelas
Pattern
, pisanan saka telung kelas sing nggawe API Regex, minangka perwakilan gabungan saka ekspresi reguler. Dokumentasi SDK kelas
Pattern
nggambarake macem-macem konstruksi ekspresi reguler, nanging yen sampeyan ora aktif nggunakake ekspresi reguler, bagean saka dokumentasi iki bisa uga mbingungake. Apa iku quantifiers lan apa bedane srakah, wegah lan possessive quantifiers? Apa kelas karakter, pencocokan wates, referensi mburi, lan ekspresi gendera sing dipasang? Aku bakal njawab pitakonan iki lan liyane ing bagean ngisor iki.
strings literal
Konstruksi ekspresi reguler sing paling gampang yaiku string literal. Supaya pencocokan pola bisa sukses, sawetara bagéan saka teks input kudu cocog karo pola konstruksi kasebut. Coba conto ing ngisor iki:
java RegexDemo apple applet
Ing conto iki, kita nyoba golek sing cocog kanggo pola
apple
ing teks input
applet
. Asil ing ngisor iki nuduhake pertandhingan sing ditemokake:
regex = apple
input = applet
Found [apple] starting at 0 and ending at 4
Kita ndeleng ing output ekspresi reguler lan teks input, banjur tandha deteksi sukses
apple
ing applet. Kajaba iku, posisi wiwitan lan pungkasan saka pertandhingan iki diwenehi:
0
lan
4
, mungguh. Posisi wiwitan nuduhake panggonan pisanan ing teks sing cocog ditemokake, lan posisi pungkasan nuduhake titik pungkasan saka pertandhingan. Saiki ayo ngomong kita menehi baris printah ing ngisor iki:
java RegexDemo apple crabapple
Wektu iki kita entuk asil ing ngisor iki, kanthi posisi wiwitan lan pungkasan sing beda:
regex = apple
input = crabapple
Found [apple] starting at 4 and ending at 8
Yen ora, kanthi lan
applet
minangka ekspresi reguler
apple
- teks input, ora bakal ditemokake sing cocog. Ekspresi reguler kabeh kudu cocog, nanging ing kasus iki, teks input ora ngemot
t
sawise
apple
.
Metakarakter
Konstruksi ekspresi reguler sing luwih menarik nggabungake karakter harfiah karo karakter meta. Contone, ing ekspresi reguler
a.b
, metakarakter titik
(.)
tegese karakter apa wae ing antarane
a
lan b. Coba conto ing ngisor iki:
java RegexDemo .ox "The quick brown fox jumps over the lazy ox."
Conto iki nggunakake
.ox
loro minangka ekspresi reguler lan
The quick brown fox jumps over the lazy ox.
minangka teks input.
RegexDemo
nggolèki teks kanggo cocog diwiwiti karo karakter apa wae lan dipungkasi karo
ox.
Asil eksekusi kaya ing ngisor iki:
regex = .ox
input = The quick brown fox jumps over the lazy ox.
Found [fox] starting at 16 and ending at 18
Found [ ox] starting at 39 and ending at 41
Ing output kita waca loro cocog:
fox
lan
ox
(karo karakter spasi ing ngarepe). Metakarakter
.
cocog karo karakter
f
ing kasus pisanan lan spasi ing kaloro. Apa sing kedadeyan yen sampeyan ngganti
.ox
karo karakter meta
.
? Sing, apa kita njaluk minangka asil saka baris printah ing ngisor iki:
java RegexDemo . "The quick brown fox jumps over the lazy ox."
Wiwit dot metacharacter cocog karakter sembarang,
RegexDemo
bakal output cocog ditemokaké kanggo kabeh karakter (kalebu karakter titik mburine) saka teks input:
regex = .
input = The quick brown fox jumps over the lazy ox.
Found [T] starting at 0 and ending at 0
Found [h] starting at 1 and ending at 1
Found [e] starting at 2 and ending at 2
Found [ ] starting at 3 and ending at 3
Found [q] starting at 4 and ending at 4
Found [u] starting at 5 and ending at 5
Found [i] starting at 6 and ending at 6
Found [c] starting at 7 and ending at 7
Found [k] starting at 8 and ending at 8
Found [ ] starting at 9 and ending at 9
Found [b] starting at 10 and ending at 10
Found [r] starting at 11 and ending at 11
Found [o] starting at 12 and ending at 12
Found [w] starting at 13 and ending at 13
Found [n] starting at 14 and ending at 14
Found [ ] starting at 15 and ending at 15
Found [f] starting at 16 and ending at 16
Found [o] starting at 17 and ending at 17
Found [x] starting at 18 and ending at 18
Found [ ] starting at 19 and ending at 19
Found [j] starting at 20 and ending at 20
Found [u] starting at 21 and ending at 21
Found [m] starting at 22 and ending at 22
Found [p] starting at 23 and ending at 23
Found [s] starting at 24 and ending at 24
Found [ ] starting at 25 and ending at 25
Found [o] starting at 26 and ending at 26
Found [v] starting at 27 and ending at 27
Found [e] starting at 28 and ending at 28
Found [r] starting at 29 and ending at 29
Found [ ] starting at 30 and ending at 30
Found [t] starting at 31 and ending at 31
Found [h] starting at 32 and ending at 32
Found [e] starting at 33 and ending at 33
Found [ ] starting at 34 and ending at 34
Found [l] starting at 35 and ending at 35
Found [a] starting at 36 and ending at 36
Found [z] starting at 37 and ending at 37
Found [y] starting at 38 and ending at 38
Found [ ] starting at 39 and ending at 39
Found [o] starting at 40 and ending at 40
Found [x] starting at 41 and ending at 41
Found [.] starting at 42 and ending at 42
Kutipan metakarakter |
Kanggo nemtokake . utawa metakarakter liyane minangka karakter harfiah ing konstruksi ekspresi reguler, sampeyan kudu uwal saka salah sawijining cara ing ngisor iki:
- ndhisiki nganggo aksara miring;
- Selehake metacharacter iki antarane
\Q lan \E (contone, \Q.\E ).
Elinga duplikat karakter apa wae sing katon ing string literal, kayata String regex = "\\."; garis miring (contone, \\. utawa \\Q.\\E ). Aja duplikat garis miring mundur sing minangka bagean saka argumen baris perintah. |
Kelas karakter
Kadhangkala sampeyan kudu mbatesi pertandhingan sing sampeyan goleki kanggo sawetara karakter tartamtu. Contone, goleki teks kanggo aksara swara
a
,
e
,
i
,
o
lan
u
, kanthi saben kedadean aksara swara dianggep cocog. Kanggo ngatasi masalah kasebut, kita bakal dibantu dening kelas karakter sing nemtokake set karakter ing antarane karakter metakarakter saka kurung kotak (
[ ]
). Kelas kasebut
Pattern
ndhukung kelas karakter sing prasaja, kelas rentang, invers, union, intersection, lan subtraction classes. Saiki kita bakal nliti kabeh.
Kelas Karakter Sederhana
Kelas karakter sing prasaja kalebu karakter sing diselehake ing sisih lan mung cocog karo karakter kasebut. Contone, kelas
[abc]
cocog karakter
a
,
b
lan
c
. Coba conto ing ngisor iki:
java RegexDemo [csw] cave
Kaya sing bisa dideleng saka asil, ing conto iki mung karakter
c
sing cocog karo
cave
:
regex = [csw]
input = cave
Found [c] starting at 0 and ending at 0
Kelas karakter terbalik
Kelas karakter terbalik diwiwiti kanthi karakter meta
^
lan mung cocog karo karakter sing ora ana ing kono. Contone, kelas
[^abc]
cocog kabeh karakter kajaba
a
,
b
lan
c
. Coba conto ing ngisor iki:
java RegexDemo "[^csw]" cave
Elinga yen ing sistem operasi sandi (Windows) kuotasi pindho dibutuhake amarga cangkang nganggep
^
minangka karakter uwal. Kaya sing sampeyan ngerteni, ing conto iki mung karakter
a
,
v
lan ditemokake
e
, sing ana sing cocog ing
cave
:
regex = [^csw]
input = cave
Found [a] starting at 1 and ending at 1
Found [v] starting at 2 and ending at 2
Found [e] starting at 3 and ending at 3
Kelas karakter Range
Kelas karakter jangkoan kasusun saka rong karakter sing dipisahake nganggo tanda hubung (
-
). Kabeh karakter, diwiwiti kanthi karakter ing sisih kiwa tandha hubung lan dipungkasi karo karakter ing sisih tengen, minangka bagean saka sawetara. Contone, sawetara
[a-z]
cocog kabeh huruf Latin cilik. Iki padha karo kanggo nemtokake kelas prasaja
[abcdefghijklmnopqrstuvwxyz]
. Coba conto ing ngisor iki:
java RegexDemo [a-c] clown
Conto iki mung cocog karo karakter
c
sing cocog ing
clown
:
regex = [a-c]
input = clown
Found [c] starting at 0 and ending at 0
Ungkapan Reguler ing Basa Jawa, Perangan 2 Ungkapan Reguler ing Basa Jawa, Bagian 3 Ungkapan Reguler ing Basa Jawa, Bagian 4 Ungkapan Reguler ing Jawa, Bagian 5
Apa maneh sing kudu diwaca: |
|
GO TO FULL VERSION