Туруктуу сөз айкаштарын изилдөөнү уланталы. Бул макалада биз алдын ала белгиленген белги класстарын, ошондой эле сандык аныктоону (ырааттуулуктарды издөө) карайбыз.
Алдын ала аныкталган каарман класстары
API классыPattern
көбүнчө колдонулган кадимки туюнтмаларга ыңгайлуу жарлыктарды сунуш кылган алдын ала аныкталган белги класстарын камтыйт. Бул tableда сол тилкедеги конструкциялар оң тилкедеги туюнтмалардын стенографиясы болуп саналат. Мисалы, \d
санды билдирет (0-9), \w
кандайдыр бир чоң же кичине тамга, астын сызык же санды билдирет. Мүмкүн болушунча алдын ала аныкталган тамга класстарын колдонуңуз. Бул сиздин codeуңузду окууну жана каталарды оңдоону жеңилдетет. Арткы сызык менен башталган конструкциялар качып кеткен же корголгон деп аталат. Мурунку макалаларда биз тескери сызыктар же символдор бар өзгөчө белгилерден качуу \Q
жана \E
аларды кадимки каармандар катары колдонуу жөнүндө сөз кылганбыз. Кадимки символдор (литералдар) менен тескери сызыкты колдонсоңуз, анда туюнтманы компиляциялоо үчүн тескери сызыктан качышыңыз керек.
private final String REGEX = "\\d"; // цифра
Бул мисалда \d
туруктуу сөз айкашы; кошумча арткы сызык программа түзүү үчүн зарыл. Биздин тестирлөө программабыз кадимки туюнтмаларды түздөн-түз консолдон окуйт, андыктан кошумча сызыктын кереги жок. Төмөнкү мисал алдын ала аныкталган символ класстарынын колдонулушун көрсөтөт: Биринчи үч мисалда туруктуу сөз айкашы жөн гана " .
" (чекиттин өзгөчө белгиси), ал каалаган белгини билдирет. Ошондуктан издөө бардык учурларда ийгorктүү болду. Башка мисалдарда алдын ала белгиленген белги класстары колдонулат, алардын маанилери биз жогорудагы tableда талкууланган.
Кванторлор
Квантификаторлор сапта символдун кайталануу санын көрсөтүүгө мүмкүндүк берет. Келгиле, ач көз, жалкоо жана өтө ач көздүк сандагычтардын кандайча иштээрин тереңирээк карап көрөлү. Бир караганда, X?, X?? жана X?+ бирдей иштейт: “X бир жолу бар же такыр жок.” Бул сандык көрсөткүчтөрдү ишке ашырууда бир аз айырмачылыктар бар, аларды биз төмөндө карайбыз.Нөл узундугу дал келет
Ач көздүктөн баштайлы. Келгиле, үч түрдүү туруктуу сөз айкаштарын жазалы: “а” тамгасы ?, * же + өзгөчө белгилери менен. Келгиле, бул туруктуу сөз айкаштарын бош сапта сынап көрсөк эмне болорун карап көрөлү: Жогорудагы мисалда издөө алгачкы эки учурда ийгorктүү болду, анткени а? жана а* сапта а символунун жок болушуна жол берет. Ошондой эле башталышы жана акыркы дал келүү индекси бирдей экенин эске алыңыз (0). Киргизүү сапынын узундугу жок болгондуктан, программа биринчи абалда эч нерсе таба алbyte :). Бул учур нөл узундуктагы дал келүү деп аталат. Мындай дал келүүлөр бир нече учурларда пайда болот: киргизүү сабы бош болгондо, киргизүү сызыгынын башында, саптын акыркы символунан кийин же саптын символдорунун ортосунда. Нөл узундуктагы дал келүүлөрдү оңой табууга болот: алар бир позицияда башталып, бүтөт. Келгиле, нөл узундуктагы дал келүүлөрдүн дагы бир нече мисалдарын карап көрөлү. Келгиле, дагы бир нече мисалдар менен нөл узундуктагы дал келүүлөрдү изилдеп көрөлү. Киргизилген сапты "а" символуна өзгөртүп, кызыктуу эффектти байкап көрөлү: үч кванттоочу тең "а" символун табышты, бирок символдун жоктугуна жол берген биринчи экөө 1-позицияда нөл узундуктагы дал келүүнү тапты. - саптын акыркы символунан кийин. Бул программа "a" символун сап катары карап, дал келгендер калмайынча ал аркылуу "чуркап" жаткандыктан болот. Колдонулган квантафикаторго жараша программа саптын аягында "эч нерсе" табат же таппайт. Эми киргизүү сапты беш тамгадан турган "a" ырааттуулугуна өзгөртөлү: Кадимки a? саптагы ар бир тамга үчүн өзүнчө дал табат. a* туюнтмасы эки дал келүүнү табат: "a"' символдор ырааттуулугу жана 5-позициядагы нөл узундуктагы дал келүү. Акырында, а+ туруктуу сөз айкашы “эч нерсе” таппай туруп, “а” символдорунун ырааттуулугун гана табат :) Эгерде киргизүү катары ар кандай символдорду камтыган сап берилсе эмне болот? Мисалы, "ababaaaab": "b" белгиси 1, 3 жана 8 позицияларында жана программа бул позицияларда нөл узундуктагы дал келүүлөрдү табат. Регулярдуу туюнтма a? «бга» көңүл бурbyte, жөн гана «а» белгисинин бар-жоктугун издейт. Эгерде кванттоочу "a" нын жок болушуна жол берсе, "a" дан башка саптагы бардык символдор нөл узундуктагы дал келүү катары көрсөтүлөт. Берилген узундуктагы тизмектерди табуу үчүн, жөн гана тармал кашаанын ичинде узундукту көрсөтүңүз: a{3} кадимки туюнтмасы үч "а" символдон турган ырааттуулукту издейт. Биринчи сапта эч нерсе табылган жок, анткени сапта а жетишсиз. Экинчиси программа таба турган 3 белгиден турат. Үчүнчү сыноо да саптын башында дал келет. 3-белгиден кийинки бардык нерсе регулярдуу туюнтманы канааттандырbyte, төмөндөгү codeдо аны аткарат жана бир нече дал келүүлөрү болот: Минималдуу ырааттуулуктун узундугун көрсөтүү үчүн, колдонуңуз:Enter your regex: a{3,}
Enter input string to search: aaaaaaaaa
I found the text "aaaaaaaaa" starting at index 0 and ending at index 9.
Бул мисалда программа бир гана дал келүүнү табат, анткени сап (3) "a" символдорунун ырааттуулугунун минималдуу талабына жооп берет. Акыр-аягы, ырааттуулуктун максималдуу узундугун орнотуу: Бул мисалда биринчи дал келүү алтынчы белги менен аяктады. Экинчи матч алтынчыдан кийинки белгилерди камтыйт, анткени алар минималдуу узундугу талабын канааттандырат. Эгерде сап бир символго кыскараак болсо, экинчи дал келүү болбойт.
GO TO FULL VERSION