Биёед омӯзиши ибораҳои муқаррариро идома диҳем. Дар ин мақола мо синфҳои аломатҳои пешакӣ муайяншуда ва инчунин миқдорро (ҷустуҷӯи пайдарпайҳо) дида мебароем.
Синфҳои аломатҳои пешакӣ муайяншуда
Синфи APIPattern
дорои синфҳои аломатҳои пешакӣ муайяншуда мебошад, ки миёнабурҳои мувофиқро барои ифодаҳои муқаррарии маъмулан истифодашаванда пешниҳод мекунанд. Дар ин ҷадвал, конструксияҳои сутуни чап тасвири стенографияи ифодаҳои сутуни рост мебошанд. Масалан, \d
маънои рақам (0-9), \w
маънои ҳама гуна ҳарфи калон ё хурд, зерхат ё рақамро дорад. То ҳадди имкон синфҳои аломатҳои пешакӣ муайяншударо истифода баред. Ин codeи шуморо хондан ва ислоҳи хатогиҳоро осон мекунад. Конструксияҳое, ки бо хатти баръакс оғоз мешаванд, escaped ё муҳофизатшуда номида мешаванд. Дар мақолаҳои қаблӣ, мо аллакай дар бораи гурехтани аломатҳои махсус бо хатҳои баръакс ё рамзҳо \Q
ва \E
истифодаи онҳо ҳамчун аломатҳои муқаррарӣ сӯҳбат карда будем. Агар шумо хатти ақибро бо аломатҳои муқаррарӣ истифода баред (ҳарфҳо), пас барои тартиб додани ифода ба шумо лозим аст, ки аз хатти баръакс гурезед.
private final String REGEX = "\\d"; // цифра
Дар ин мисол \d
ифодаи муқаррарӣ; барои тартиб додани барнома хати хати иловагӣ лозим аст. Барномаи санҷишии мо ифодаҳои муқаррариро мустақиман аз консол мехонад, аз ин рӯ ҳеҷ гуна рахи иловагӣ лозим нест. Мисоли зерин истифодаи синфҳои аломатҳои пешакӣ муайяншударо нишон медиҳад: Дар се мисоли аввал ифодаи муқаррарӣ танҳо " .
" (аломати махсуси нуқта) аст, ки маънои ҳар гуна аломатро дорад. Аз ин ру, чустучу дар хамаи мавридхо бомуваффакият гузашт. Мисолҳои дигар синфҳои аломатҳои пешакӣ муайяншударо истифода мебаранд, ки маънои онҳоро мо дар ҷадвали боло баррасӣ кардем.
Миқдорҳо
Миқдорҳо ба шумо имкон медиҳанд, ки шумораи пайдоиши аломатро дар сатр муайян кунед. Биёед, ба нозукихои чи тавр кор кардани микдорхои хасис, танбал ва хеле тамаъкор назар андозем. Дар назари аввал чунин менамояд, ки миќдорњои X?, X?? ва X?+ ҳамин тавр кор мекунанд: "X як бор мавҷуд аст ё тамоман нест." Дар татбиқи ин миқдорҳо фарқиятҳои ночиз мавҷуданд, ки мо дар поён дида мебароем.Дарозии сифр мувофиқат мекунад
Биёед, аз хасис оғоз кунем. Биёед се ибораи муқаррарии гуногунро нависед: ҳарфи «а» бо аломатҳои махсус ?, * ё +. Биёед бубинем, ки агар ин ибораҳои муқаррариро дар сатри холӣ санҷем, чӣ мешавад: Дар мисоли боло ҷустуҷӯ дар ду ҳолати аввал муваффақ буд, зеро ибораҳои а? ва а* имкон медихад, ки аломати а дар сатр гум шавад. Инчунин қайд кунед, ки шохиси бозии оғоз ва охирин якхела аст (0). Азбаски сатри вуруд дарозӣ надорад, барнома дар мавқеи аввал чизе намеёбад :). Ин ҳолат бозии сифрӣ номида мешавад. Чунин мувофиқатҳо дар чанд маврид рух медиҳанд: вақте ки хати вуруд холӣ аст, дар аввали сатри воридот, пас аз аломати охирини сатр ё байни аломатҳои сатр. Гугирдҳои дарозии сифрро муайян кардан осон аст: онҳо дар як мавқеъ оғоз ва анҷом меёбанд. Биёед ба якчанд мисолҳои бозиҳои сифр-дарозии бештар нигаред. Биёед бо чанд мисоли дигар мувофиқатҳои дарозии сифрро омӯзем. Биёед сатри вурудро ба аломати "а" иваз кунем ва таъсири ҷолибро мушоҳида кунем: Ҳар се миқдор аломати "а"-ро ёфтанд, аммо дуи аввал, ки набудани аломатро имкон медиҳанд, дар мавқеи 1 мувофиқати сифрӣ пайдо карданд. - пас аз аломати охирини сатр. Ин аз он сабаб рӯй медиҳад, ки барнома аломати "a"-ро ҳамчун сатр баррасӣ мекунад ва то он даме, ки дигар мувофиқатҳо мавҷуд набошанд, тавассути он "мегузаранд". Вобаста аз миқдори истифодашаванда, барнома дар охири сатр "ҳеҷ чиз"-ро намеёбад ё намеёбад. Акнун биёед сатри вурудро ба пайдарпаии панҷ ҳарфи "а" иваз кунем: Ифодаи муқаррарии a? ба хар як харфи сатр алохида мувофикат мекунад. Ифодаи a* ду мувофиқатро пайдо мекунад: пайдарпаии аломатҳои "a"' ва мувофиқати сифрӣ дар мавқеи 5. Ва ниҳоят, ифодаи муқаррарии a+ танҳо пайдарпаии аломатҳои “а”-ро бидуни дарёфти “ҳеҷ чиз” пайдо мекунад :) Агар сатри дорои аломатҳои гуногун ҳамчун вуруд дода шавад, чӣ мешавад? Масалан, "ababaaaab": Аломати "b" дар мавқеъҳои 1, 3 ва 8 ҷойгир аст ва барнома дар ин мавқеъ мувофиқатҳои дарозии сифрро пайдо мекунад. Ифодаи муқаррарӣ а? ба «б» эътибор намедиҳад, балки фақат мавҷудияти (ё набудани) аломати «а»-ро меҷӯяд. Агар миқдоркунанда мавҷуд набудани "a" иҷоза диҳад, ҳама аломатҳои сатр ғайр аз "a" ҳамчун мувофиқати дарозии сифр нишон дода мешаванд. Барои пайдо кардани пайдарпайии дарозии додашуда, танҳо дарозиро дар қавсҳои ҷингила муайян кунед: Ифодаи муқаррарии a{3} пайдарпайии се аломати "а"-ро ҷустуҷӯ мекунад. Дар сатри аввал чизе ёфт нашуд, зеро дар сатр а кофй набуд. Дуюм 3 аломатро дар бар мегирад, ки барнома онҳоро пайдо мекунад. Санҷиши сеюм низ дар оғози сатр мувофиқат пайдо мекунад. Ҳама чиз пас аз аломати 3-юм ифодаи муқаррариро қонеъ намекунад, дар 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