JavaRush /Java блогу /Random-KY /Java тилиндеги кадимки туюнтмалар
terranum
Деңгээл
Milan

Java тилиндеги кадимки туюнтмалар

Группада жарыяланган
RegExРегулярдуу туюнтма текстке колдонула турган үлгүнүн бир түрү (String, Java тorнде). Java кадимки туюнтмаларга дал келүү үчүн java.util.regex пакетин камсыз кылат. Кадимки сөз айкаштары Perl программалоо тorне абдан окшош жана үйрөнүү абдан оңой. Кадимки сөз айкашы же текстке (анын бир бөлүгүнө) дал келет же дал келбейт. * Эгерде кадимки туюнтма тексттин бир бөлүгүнө дал келсе, анда биз аны таба алабыз. ** Эгерде туруктуу сөз айкаштары татаал болсо, анда биз туруктуу сөз айкашынын кайсы бөлүгү тексттин кайсы бөлүгүнө дал келерин оңой эле аныктай алабыз.

Биринчи мисал

Кадимки " [a-z] +" сөз айкашы тексттеги бардык кичине тамгаларга дал келет. инклюзивдикке чейинки [a-z]каалаган белгини билдирет жана "бир же бир нече" белгини билдирет. Келгиле, биз "code 2 Java окуу куралын үйрөнүү" сабын беребиз деп коёлу. Муну Javaда кантип кылса болот Биринчиден, сиз шаблон түзүшүңүз керек: az+
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
matcherАндан кийин диаграммада билдирүү жөнөтүү менен текстти түзүшүңүз керек :
Matcher m = p.matcher(“code 2 learn java tutorial”);
ЭСКЕРТҮҮ: Конструкторлор да жок Pattern, Matcherбиз аларды класстык методдор аркылуу түзөбүз Pattern. Pattern Class:Класс an objectиси регулярдуу туюнтумдун чагылдырылышын түзөт. Pattern классы коомдук конструкторлорду камсыз кылbyte. Үлгү түзүү үчүн, адегенде жалпы статикалык ыкмалардын бирин чакырышыңыз керек, андан кийин класстын an objectисин кайтарат Pattern. Бул ыкмалар аргумент катары туруктуу туюнтманы кабыл алат. Matcher Class:Finder an objectиси – бул үлгүнү чечмелөөчү жана киргизүү сабында дал келген операцияларды аткарган кыймылдаткыч. PatternКласс сыяктуу эле , Matcherанын коомдук конструкторлору жок. Сиз класс an objectисинде Matcherметодду чакыруу менен an object аласыз . Бул кадамдарды аткаргандан кийин, эми бизде класстын үлгүсү бар , биз үлгү табылган же табылбаганын текшере алабыз, эгер табылса, кайсы позицияда ж.б. үлгү бүт сапка дал келсе true, антпесе false кайтарат. Эгерде үлгү саптын башына дал келсе true, антпесе false кайтарат. үлгү тексттин кайсы бир бөлүгүнө дал келсе, чындыкты кайтарат. matcherPatternMatcher m m.matches()m.lookingAt()m.find ()

Дал келүү

Ийгorктүү дал келгенден кийин, m.start() биринчи дал келген символдун индексин кайтарат жана m.end() акыркы дал келген символдун индексин кайтарып берет, ага кошуп бир. Эгерде ийгorксиз аракет жасалып, эч кандай матч табылбаса , m.start()ыргытышатm.end()IllegalStateException
  • Бул RuntimeExceptionсиз аны кармашыңыз керек эмес.
m.end()Акыркы дал келген символдун индексин бир плюс кайтаруу кызыктай көрүнүшү мүмкүн , бирок String.
  • Мисалы,“Now is the time“.substring(m.start(), m.end())
ошол эле сапты кайтарат. Келгиле, codeду карап көрөлү:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

Кошумча методдор

Эгерде дал келүү бар болсо, анда:
  • m.replaceFirst(replacement)жаңы сапты кайтарат, мында үлгүгө дал келген биринчи субсап менен алмаштырылатreplacement
  • m.replaceAll(replacement)жаңы сапты кайтарат, мында үлгүгө дал келген ар бир субсап алмаштырылат
  • m.find(StartIndex)көрсөтүлгөн индекстен баштап кийинки дал келүүнү табыңыз
  • m.reset()шаблонду баштапкы абалга келтирет
  • m.reset(NewText)тапкычты баштапкы абалга келтирет жана ага жаңы текст берет (балким String, StringBufferже CharBuffer)

Регулярдуу туюнтма синтаксиси

  • ^Саптын башына дал келет.
  • $Саптын аягына дал келет.
  • .Жаңы саптан башка бир символго дал келет. m опциясын колдонуу жаңы сапка дал келүүгө мүмкүндүк берет.
  • [...]Кашадагы каалаган бир белгиге дал келет.
  • [^ ...]кашаанын ичинде эмес каалаган бир белгиге дал келет.
  • \AБүт линияны баштаңыз.
  • \zБүт линиянын аягы.
  • \ZАкыркы саптын терминаторунан башка бүт саптын аягы.
  • re*Мурунку туюнтумдун 0 же андан көп көрүнүшүнө дал келет.
  • re+Мурунку туюнтмага бир же бир нече дал келүү.
  • re?Мурунку туюнтумдун жайгашкан жерине 0 же 1 дал келет.
  • re{n}Дал N. Мурунку туюнтумдун кайталануу саны.
  • re{n,}Мурунку туюнтмадагы N же андан көп жолу дал келет.
  • re{n, m}Мурунку туюнтумдун жок дегенде n жана эң көп m көрүнүшүнө дал келет.
  • a|bА же б дал келет.
  • (re)Туруктуу сөз айкаштарынын тобу жана табылган текстти эстеп калуу.
  • (?: re)Табылган текстти эстебеген туруктуу сөз айкаштарынын топтору.
  • (?> re)Эч кандай кайтарымы жок көз карандысыз үлгүгө дал келет.
  • \wТамгаларды жана сандарды дал келет [a-zA-Z_0-9].
  • \WБул тамгалар же сандар эмес.
  • \sБоштуктарга дал келет. [\t\n\r\f] менен барабар.
  • \SБоштуктун символдору эмес.
  • \dСандарга дал келет. [0-9] менен барабар.
  • \DСандар дал келбейт.
  • \GАкыркы матчтын чекитине дал келет.
  • \nЖаңы сапка дал келет.
  • \bСөздүн чегинде дал келет.
  • \BСөздүн чегинде дал келбейт.
  • \n, \t, etc.Жаңы сап, каретканы кайтаруу, өтмөк ж.б. символдор.
  • \Q\E алдында бардык белгилерди цитата кыл.
  • \E\Q менен башталган цитата аяктайт.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION