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

Ungkapan Biasa ing Basa Jawa, Part 4

Diterbitake ing grup
We presentake kanggo manungsa waé terjemahan saka pandhuan singkat kanggo ekspresi reguler ing 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 4 - 1 Ungkapan Reguler ing Basa Jawa, Bagian 1 Ungkapan Reguler ing Basa Jawa, Bagian 2 Ungkapan Reguler ing Basa Jawa, Bagian 3

Cara kanggo nggarap grup sing dijupuk

Kode sumber aplikasi RegexDemokalebu panggilan metode m.group(). Metode kasebut group()minangka salah sawijining metode kelas Matchersing dituju kanggo nggarap klompok sing dijupuk:
  • Cara kasebut int groupCount()ngasilake jumlah klompok sing dijupuk ing pola solver. Nomer iki ora nganggep nomer grup panangkepan khusus 0, sing cocog karo pola sakabehe.

  • Cara kasebut String group()ngasilake karakter saka pertandhingan sadurunge sing ditemokake. Kanggo nglaporake telusuran sing sukses kanggo string kosong, cara iki ngasilake string kosong. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

  • Cara iki String group(int group)padha karo cara sadurunge, kajaba iku ngasilake karakter saka match sadurungé ketemu, dijupuk dening nomer grup sing ditemtokake dening parameter group. Elinga yen iki group(0)padha karo group(). Yen cithakan ora duwe klompok dijupuk karo nomer diwenehi, cara mbalang pangecualian IndexOutOfBoundsException. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

  • Cara kasebut String group(String name)ngasilake karakter saka pertandhingan sadurunge sing ditemokake, dijupuk dening klompok jeneng. Yen jeneng grup sing dijupuk ora ana ing cithakan, pangecualian bakal dibuwang IllegalArgumentException. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

Conto ing ngisor iki nuduhake panggunaan metode groupCount()lan 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));
Hasil eksekusi:
3
0: abc
1: abc
2: bc
3: c
Ungkapan Biasa ing Basa Jawa, Part 4 - 2

Cara kanggo nemtokake posisi match

Kelas kasebut Matchernyedhiyakake sawetara cara sing ngasilake posisi wiwitan lan pungkasan saka pertandhingan:
  • Cara kasebut int start()ngasilake posisi wiwitan saka pertandhingan sadurunge sing ditemokake. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

  • Cara kasebut int start(int group)padha karo cara sadurunge, nanging ngasilake posisi wiwitan pertandhingan sadurunge sing ditemokake kanggo grup sing nomer kasebut ditemtokake dening parameter group. Yen cithakan ora duwe klompok dijupuk karo nomer diwenehi, cara mbalang pangecualian IndexOutOfBoundsException. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

  • Cara kasebut int start(String name)padha karo cara sadurunge, nanging ngasilake posisi wiwitan pertandhingan sadurunge sing ditemokake kanggo grup sing diarani name. Yen grup sing dijupuk nameora ana ing cithakan, pangecualian dibuwang IllegalArgumentException. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

  • Cara int end()ngasilake posisi karakter pungkasan saka pertandhingan sadurunge sing ditemokake plus 1. Yen matcher durung nindakake pertandhingan utawa operasi telusuran sadurunge gagal, pangecualian dibuwang IllegalStateException.

  • Cara kasebut int end(int group)padha karo cara sadurunge, nanging ngasilake posisi pungkasan saka pertandhingan sadurunge sing ditemokake kanggo grup sing nomer kasebut ditemtokake dening parameter group. Yen cithakan ora duwe klompok dijupuk karo nomer diwenehi, cara mbalang pangecualian IndexOutOfBoundsException. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

  • Cara kasebut int end(String name)padha karo cara sadurunge, nanging ngasilake posisi pungkasan saka pertandhingan sadurunge sing ditemokake kanggo grup sing diarani name. Yen grup sing dijupuk nameora ana ing cithakan, pangecualian dibuwang IllegalArgumentException. Yen solver durung nindakake panelusuran utawa operasi golek sadurunge gagal, pangecualian bakal dibuwang IllegalStateException.

Conto ing ngisor iki nuduhake rong cara nemokake pertandhingan sing ngasilake posisi pertandhingan wiwitan/akhir kanggo grup panangkepan nomer 2:
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();
}
Output saka conto iki yaiku:
Найдено bc
начинается с позиции 1 и заканчивается на позиции 2
Найдено bc
начинается с позиции 4 и заканчивается на позиции 5
Найдено bc
начинается с позиции 7 и заканчивается на позиции 8

Metode saka kelas PatternSyntaxException

Kayata kelas PatternSyntaxExceptionnggambarake kesalahan sintaks ing ekspresi reguler. Mbuwang pangecualian kuwi saka cara compile()lan matches()kelas Pattern, lan kawangun liwat konstruktor ing ngisor iki: PatternSyntaxException(String desc, String regex, int index) Konstruktor iki nyimpen gambaran kasebut ( desc), expression biasa ( regex), lan posisi ing kesalahan sintaksis. Yen lokasi kesalahan sintaks ora dingerteni, nilai kasebut indexdisetel menyang -1. Paling kamungkinan, sampeyan ora bakal perlu kanggo nggawe conto saka PatternSyntaxException. Nanging, sampeyan kudu ngekstrak nilai ing ndhuwur nalika nggawe pesen kesalahan sing diformat. Kanggo nindakake iki, sampeyan bisa nggunakake cara ing ngisor iki:
  • Cara kasebut String getDescription()ngasilake katrangan babagan kesalahan sintaksis.
  • Cara kasebut int getIndex()ngasilake salah siji posisi sing ana kesalahan, utawa -1 yen posisi ora dingerteni.
  • Cara kasebut String getPattern()ngasilake ekspresi reguler sing ora bener.
Kajaba iku, metode sing diwarisake String getMessage()ngasilake senar multiline kanthi nilai sing dibalekake saka metode sadurunge bebarengan karo indikasi visual ing ngendi kesalahan sintaks dumadi ing cithakan. Apa kesalahan sintaksis? Punika conto: java RegexDemo (?itree Treehouse Ing kasus iki, kita kelalen nemtokake metakarakter kurung nutup ( )) ing ekspresi gendéra nested. Iki minangka output saka kesalahan iki:
regex = (?itree
input = Treehouse
Неправильное регулярное выражение: Unknown inline modifier near index 3
(?itree
   ^
Описание: Unknown inline modifier
Позиция: 3
Неправильный шаблон: (?itree

Mbangun Aplikasi Ekspresi Reguler Migunani Nggunakake API Regex

Ekspresi reguler ngidini sampeyan nggawe aplikasi pangolahan teks sing kuat. Ing bagean iki, kita bakal nuduhake sampeyan rong aplikasi praktis sing muga-muga bisa nyengkuyung sampeyan supaya luwih njelajah kelas lan metode API Regex. Apendiks kapindho ngenalake Lexan: perpustakaan kode sing bisa digunakake maneh kanggo nindakake analisis leksikal. Ungkapan Biasa ing Basa Jawa, Part 4 - 3

Ekspresi reguler lan dokumentasi

Dokumentasi minangka salah sawijining tugas wajib nalika ngembangake piranti lunak profesional. Untunge, ekspresi reguler bisa mbantu akeh aspek nggawe dokumentasi. Kode ing Listing 1 ngekstrak baris sing ngemot komentar gaya C siji-baris lan multiline saka file sumber lan nulis menyang file liyane. Supaya kode bisa digunakake, komentar kudu ana ing baris sing padha. Listing 1. Nompo komentar
import 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;
      }
   }
}
Cara main()ing Listing 1 pisanan mriksa sintaks baris perintah sing bener banjur nyusun ekspresi reguler sing dirancang kanggo ndeteksi komentar siji lan multi-baris menyang obyek kelas Pattern. Yen ora ana pangecualian PatternSyntaxException, metode kasebut main()mbukak file sumber, nggawe file target, entuk matcher sing cocog karo saben baris sing diwaca karo pola kasebut, banjur maca file sumber baris kanthi baris. Kanggo saben baris, dicocogake karo pola komentar. Yen kasil, cara main()nulis string (diterusake karo baris anyar) menyang file target (kita bakal nutupi logika I/O file ing tutorial Java 101 ing mangsa ngarep). Kompilasi Listing 1 kaya ing ngisor iki: javac ExtCmnt.java Jalanake aplikasi kanthi file ExtCmnt.javaminangka input: java ExtCmnt ExtCmnt.java out Sampeyan kudu entuk asil ing ngisor iki ing file metu:
// Следующий шаблон определяет многострочные комментарии,
 // располагающиеся в одной строке (например, /* одна строка */)
    // и однострочные комментарии (например, // Howая-то строка).
    // Комментарий может располагаться в любом месте строки.
p = Pattern.compile(".*/\\*.*\\*/|.*//.*$");
    if (m.matches()) /* Должна соответствовать вся строка */
Ing senar pola .*/\\*.*\\*/|.*//.*$, metacharacter pipe |tumindak minangka operator UTAWA logis, nuduhake yen matcher kudu nggunakake operan kiwa saka wangun expression biasa diwenehi kanggo nemokake match ing teks matcher. Yen ora ana sing cocog, matcher nggunakake operan sing bener saka konstruk ekspresi reguler sing diwenehake kanggo upaya panelusuran liyane (metakarakter kurung ing grup sing dijupuk uga mbentuk operator logis). Ungkapan Biasa ing Basa Jawa, Part 5
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION