JavaRush /Блоги Java /Random-TG /Асосҳои ифодаҳои муқаррарӣ дар Java. Қисми 3
articles
Сатҳи

Асосҳои ифодаҳои муқаррарӣ дар Java. Қисми 3

Дар гурӯҳ нашр шудааст
Биёед омӯзиши ибораҳои муқаррариро идома диҳем. Дар ин мақола мо синфҳои аломатҳои пешакӣ муайяншуда ва инчунин миқдорро (ҷустуҷӯи пайдарпайҳо) дида мебароем. Асосҳои ифодаҳои муқаррарӣ дар Java.  Қисми 3 - 1

Синфҳои аломатҳои пешакӣ муайяншуда

Синфи API Patternдорои синфҳои аломатҳои пешакӣ муайяншуда мебошад, ки миёнабурҳои мувофиқро барои ифодаҳои муқаррарии маъмулан истифодашаванда пешниҳод мекунанд. Асосҳои ифодаҳои муқаррарӣ дар Java.  Қисми 3 - 2Дар ин ҷадвал, конструксияҳои сутуни чап тасвири стенографияи ифодаҳои сутуни рост мебошанд. Масалан, \dмаънои рақам (0-9), \wмаънои ҳама гуна ҳарфи калон ё хурд, зерхат ё рақамро дорад. То ҳадди имкон синфҳои аломатҳои пешакӣ муайяншударо истифода баред. Ин codeи шуморо хондан ва ислоҳи хатогиҳоро осон мекунад. Конструксияҳое, ки бо хатти баръакс оғоз мешаванд, escaped ё муҳофизатшуда номида мешаванд. Дар мақолаҳои қаблӣ, мо аллакай дар бораи гурехтани аломатҳои махсус бо хатҳои баръакс ё рамзҳо \Qва \Eистифодаи онҳо ҳамчун аломатҳои муқаррарӣ сӯҳбат карда будем. Агар шумо хатти ақибро бо аломатҳои муқаррарӣ истифода баред (ҳарфҳо), пас барои тартиб додани ифода ба шумо лозим аст, ки аз хатти баръакс гурезед.
private final String REGEX = "\\d"; // цифра
Дар ин мисол \dифодаи муқаррарӣ; барои тартиб додани барнома хати хати иловагӣ лозим аст. Барномаи санҷишии мо ифодаҳои муқаррариро мустақиман аз консол мехонад, аз ин рӯ ҳеҷ гуна рахи иловагӣ лозим нест. Мисоли зерин истифодаи синфҳои аломатҳои пешакӣ муайяншударо нишон медиҳад: Основы регулярных выражений в Java. Часть 3 - 3Основы регулярных выражений в Java. Часть 3 - 4Дар се мисоли аввал ифодаи муқаррарӣ танҳо " ." (аломати махсуси нуқта) аст, ки маънои ҳар гуна аломатро дорад. Аз ин ру, чустучу дар хамаи мавридхо бомуваффакият гузашт. Мисолҳои дигар синфҳои аломатҳои пешакӣ муайяншударо истифода мебаранд, ки маънои онҳоро мо дар ҷадвали боло баррасӣ кардем.

Миқдорҳо

Основы регулярных выражений в Java. Часть 3 - 4Миқдорҳо ба шумо имкон медиҳанд, ки шумораи пайдоиши аломатро дар сатр муайян кунед. Биёед, ба нозукихои чи тавр кор кардани микдорхои хасис, танбал ва хеле тамаъкор назар андозем. Дар назари аввал чунин менамояд, ки миќдорњои X?, X?? ва X?+ ҳамин тавр кор мекунанд: "X як бор мавҷуд аст ё тамоман нест." Дар татбиқи ин миқдорҳо фарқиятҳои ночиз мавҷуданд, ки мо дар поён дида мебароем.

Дарозии сифр мувофиқат мекунад

Биёед, аз хасис оғоз кунем. Биёед се ибораи муқаррарии гуногунро нависед: ҳарфи «а» бо аломатҳои махсус ?, * ё +. Биёед бубинем, ки агар ин ибораҳои муқаррариро дар сатри холӣ санҷем, чӣ мешавад: Основы регулярных выражений в Java. Часть 3 - 5Дар мисоли боло ҷустуҷӯ дар ду ҳолати аввал муваффақ буд, зеро ибораҳои а? ва а* имкон медихад, ки аломати а дар сатр гум шавад. Инчунин қайд кунед, ки шохиси бозии оғоз ва охирин якхела аст (0). Азбаски сатри вуруд дарозӣ надорад, барнома дар мавқеи аввал чизе намеёбад :). Ин ҳолат бозии сифрӣ номида мешавад. Чунин мувофиқатҳо дар чанд маврид рух медиҳанд: вақте ки хати вуруд холӣ аст, дар аввали сатри воридот, пас аз аломати охирини сатр ё байни аломатҳои сатр. Гугирдҳои дарозии сифрро муайян кардан осон аст: онҳо дар як мавқеъ оғоз ва анҷом меёбанд. Биёед ба якчанд мисолҳои бозиҳои сифр-дарозии бештар нигаред. Биёед бо чанд мисоли дигар мувофиқатҳои дарозии сифрро омӯзем. Биёед сатри вурудро ба аломати "а" иваз кунем ва таъсири ҷолибро мушоҳида кунем: Основы регулярных выражений в Java. Часть 3 - 6Ҳар се миқдор аломати "а"-ро ёфтанд, аммо дуи аввал, ки набудани аломатро имкон медиҳанд, дар мавқеи 1 мувофиқати сифрӣ пайдо карданд. - пас аз аломати охирини сатр. Ин аз он сабаб рӯй медиҳад, ки барнома аломати "a"-ро ҳамчун сатр баррасӣ мекунад ва то он даме, ки дигар мувофиқатҳо мавҷуд набошанд, тавассути он "мегузаранд". Вобаста аз миқдори истифодашаванда, барнома дар охири сатр "ҳеҷ чиз"-ро намеёбад ё намеёбад. Акнун биёед сатри вурудро ба пайдарпаии панҷ ҳарфи "а" иваз кунем: Основы регулярных выражений в Java. Часть 3 - 7Ифодаи муқаррарии a? ба хар як харфи сатр алохида мувофикат мекунад. Ифодаи a* ду мувофиқатро пайдо мекунад: пайдарпаии аломатҳои "a"' ва мувофиқати сифрӣ дар мавқеи 5. Ва ниҳоят, ифодаи муқаррарии a+ танҳо пайдарпаии аломатҳои “а”-ро бидуни дарёфти “ҳеҷ чиз” пайдо мекунад :) Агар сатри дорои аломатҳои гуногун ҳамчун вуруд дода шавад, чӣ мешавад? Масалан, "ababaaaab": Основы регулярных выражений в Java. Часть 3 - 8Аломати "b" дар мавқеъҳои 1, 3 ва 8 ҷойгир аст ва барнома дар ин мавқеъ мувофиқатҳои дарозии сифрро пайдо мекунад. Ифодаи муқаррарӣ а? ба «б» эътибор намедиҳад, балки фақат мавҷудияти (ё набудани) аломати «а»-ро меҷӯяд. Агар миқдоркунанда мавҷуд набудани "a" иҷоза диҳад, ҳама аломатҳои сатр ғайр аз "a" ҳамчун мувофиқати дарозии сифр нишон дода мешаванд. Барои пайдо кардани пайдарпайии дарозии додашуда, танҳо дарозиро дар қавсҳои ҷингила муайян кунед: Основы регулярных выражений в Java. Часть 3 - 9Ифодаи муқаррарии a{3} пайдарпайии се аломати "а"-ро ҷустуҷӯ мекунад. Дар сатри аввал чизе ёфт нашуд, зеро дар сатр а кофй набуд. Дуюм 3 аломатро дар бар мегирад, ки барнома онҳоро пайдо мекунад. Санҷиши сеюм низ дар оғози сатр мувофиқат пайдо мекунад. Ҳама чиз пас аз аломати 3-юм ифодаи муқаррариро қонеъ намекунад, дар codeи зер ин мувофиқат мекунад ва якчанд мувофиқат вуҷуд дорад: Основы регулярных выражений в Java. Часть 3 - 10Барои муайян кардани дарозии ҳадди ақали пайдарпай, истифода баред:
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" мувофиқат мекунад. Ниҳоят, муқаррар кардани дарозии максималии пайдарпай: Основы регулярных выражений в Java. Часть 3 - 11Дар ин мисол, бозии аввал дар аломати шашум анҷом ёфт. Дар бозии дуюм дорои аломатҳои пас аз як шашум, зеро онхо талаботи минималии дарозиро конеъ мегардонанд. Агар сатр як аломат кӯтоҳтар мебуд, мувофиқати дуюм вуҷуд надошт.

Истифодаи гурӯҳҳо ва синфҳои аломатҳо бо миқдорҳо

То ин вақт, мо миқдорҳоро дар сатрҳои дорои як аломат санҷидаем. Миқдорҳо танҳо ба як аломат истифода мешаванд, аз ин рӯ ифодаи муқаррарии "abc+" ба сатрҳои дорои "ab" ва "c" як ё якчанд маротиба мувофиқат мекунад. Он як ё якчанд маротиба маънои "abc" нахоҳад буд. Аммо миқдорҳо метавонанд дар якҷоягӣ бо гурӯҳҳо ва синфҳои аломатҳо истифода шаванд, ба монанди [abc]+ (a ё b ё c, як ё якчанд маротиба) ё (abc)+ (“abc” як ё якчанд маротиба). Биёед як гурӯҳи аломатҳоро (саг), се маротиба дар як сатр пайдо кунем: Основы регулярных выражений в Java. Часть 3 - 12Дар мисоли аввал, барнома мувофиқатро пайдо мекунад, зеро миқдор ба як гурӯҳи аломатҳо паҳн мешавад. Агар шумо қавсҳоро хориҷ кунед, миқдори муайянкунандаи {3} танҳо ба ҳарфи "g" татбиқ мешавад. Шумо инчунин метавонед миқдоркунакҳоро бо синфҳои аломат истифода баред: Основы регулярных выражений в Java. Часть 3 - 13Миқдори {3} ба синфи аломатҳои дар қавс дар мисоли якум ва дар дуюм - танҳо ба аломати "c" дахл дорад.

Тафовут байни миқдорҳои хасис, танбал ва аз ҳад зиёд хасис

Байни миқдорҳои тамаъкор, нохоҳам ва соҳибӣ фарқиятҳои ночиз мавҷуданд. Миқдорҳои тамаъкор аз он сабаб номгузорӣ шудаанд, ки онҳо кӯшиш мекунанд, ки мувофиқати дарозтаринро пайдо кунанд: барнома аввал кӯшиш мекунад, ки тамоми сатрро "хӯрад", агар мувофиқат пайдо нашавад, як аломат партофта мешавад ва ҷустуҷӯ то пайдо шудани мувофиқат такрор мешавад ё дигар характер намемонад. Танбалхо бошанд, аз аввали сатр сар карда, ба паси характер характер илова мекунанд, то он даме, ки мувофикат пайдо кунад. Ниҳоят, миқдори ҳасад тамоми сатрро як маротиба, бидуни нест кардани аломатҳо, ба монанди чашмгуруснагӣ скан мекунад. Барои намоиш, мо сатри xfooxxxxxxfoo-ро истифода мебарем. Основы регулярных выражений в Java. Часть 3 - 14Мисоли аввал миқдорбандии чашмгурусна .*-ро барои дарёфти ҳар гуна аломат, 0 ё бештар аз он истифода мебарад ва пас аз он аломатҳои "f" "o" "o" истифода мешаванд. Азбаски cantifier хасис аст, гӯгирд ёфтшуда тамоми сатрро дар бар мегирад. Миқдори хасис на ҳама мувофиқатҳоро дар сатр пайдо мекунад, зеро дар қадами аввал, пас аз скан кардани тамоми сатр, он мувофиқат пайдо мекунад ва корро анҷом медиҳад. Мисоли дуюм танбал аст ва аз аввали сатр оғоз мешавад ва аломат ба ҳарф илова мекунад. Барнома бо тафтиши "холӣ" оғоз меёбад, аммо аз он вақт пайдарпаии "foo" дар аввали сатр нест, ҷустуҷӯ бо иловаи аломати "х" идома меёбад, ки пас аз он мувофиқати аввал байни индексҳои 0 ва 4 пайдо мешавад. Ҷустуҷӯ то охири сатр идома меёбад. ва мувофиқати дуюм дар байни шохиси 4 ва 13 пайдо мешавад. Мисоли сеюм тасодуфҳоро намеёбад, зеро миқдор ҳасад аст. Дар ин ҳолат, ифодаи муқаррарии .*+ тамоми сатрро "хӯрд" ва барои "foo" чизе намегузорад. Вақте ки шумо бояд ягон чизи нолозимро дар сатр партофтан лозим аст, миқдори ҳасадро истифода баред, он нисбат ба миқдори муодor хасис самараноктар хоҳад буд. Ҳамааш ҳамин! Пайванд ба манбаъ: Асосҳои ифодаҳои муқаррарӣ дар Java. Қисми 3
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION