JavaRush /Blog Jawa /Random-JV /Ungkapan Biasa ing Basa Jawa, Part 1

Ungkapan Biasa ing Basa Jawa, Part 1

Diterbitake ing grup
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. Ungkapan Biasa ing Basa Jawa, Part 1 - 1

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 Patternlan 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, Matcherlan 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.CharSequencelan dadi sumber teks).
  • Objek kelas PatternSyntaxExceptiondigunakake 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 trueyen senar panggilan cocog karo ekspresi reguler regex.
Metode Trep
matches()lan cara penak expression-oriented biasa saka kelas Stringdipun ginakaken ing hood ing cara sing padha kanggo Regex API.

RegexDemo

Aku nggawe aplikasi RegexDemokanggo nduduhake ekspresi reguler Jawa lan macem-macem cara saka Pattern, Matcherlan 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;
      }
      // Преобразуем символьные последовательности начала новой строки (\n) в символы начала строки.
      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 mainkelas RegexDemoyaiku 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. Ungkapan Biasa ing Basa Jawa, Part 1 - 2Sebagéyan gedhé kode kasebut RegexDemodilampirake ing try-catch. Blok trypisanan ngasilake ekspresi reguler lan teks input sing diwenehake, banjur nggawe obyek Patternsing nyimpen ekspresi reguler sing dikompilasi (ekspresi reguler dikompilasi kanggo nambah kinerja pencocokan pola). A matcher diekstrak saka obyek Patternlan digunakake kanggo nggoleki pertandhingan kanthi iteratif nganti kabeh ditemokake. Blok kasebut catchnelpon sawetara metode kelas PatternSyntaxExceptionkanggo 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 Patternnggambarake 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 appleing 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 appleing applet. Kajaba iku, posisi wiwitan lan pungkasan saka pertandhingan iki diwenehi: 0lan 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 appletminangka ekspresi reguler apple- teks input, ora bakal ditemokake sing cocog. Ekspresi reguler kabeh kudu cocog, nanging ing kasus iki, teks input ora ngemot tsawise apple. Ungkapan Biasa ing Basa Jawa, Part 1 - 3

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 alan b. Coba conto ing ngisor iki: java RegexDemo .ox "The quick brown fox jumps over the lazy ox." Conto iki nggunakake .oxloro minangka ekspresi reguler lan The quick brown fox jumps over the lazy ox.minangka teks input. RegexDemonggolè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: foxlan ox(karo karakter spasi ing ngarepe). Metakarakter . cocog karo karakter fing kasus pisanan lan spasi ing kaloro. Apa sing kedadeyan yen sampeyan ngganti .oxkaro 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, RegexDemobakal 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 \Qlan \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, olan 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 Patternndhukung 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, blan c. Coba conto ing ngisor iki: java RegexDemo [csw] cave Kaya sing bisa dideleng saka asil, ing conto iki mung karakter csing 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, blan 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, vlan 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 csing 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
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION