JavaRush /Блоги Java /Random-TG /RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррар...
Artur
Сатҳи
Tallinn

RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 1

Дар гурӯҳ нашр шудааст
Нусхаи аслии ин мақола дар ин ҷост . Эҳтимол, назарияи аз ҳад зиёд вуҷуд надорад ва ман дар охири мақола якчанд истинодҳоро ба маводи муфассалтар оид ба regex пешкаш мекунам. Аммо ба назарам чунин менамуд, ки оғоз кардани мавзӯъ ба монанди ибораҳои муқаррарӣ хеле ҷолибтар хоҳад буд, агар имкони на танҳо пур кардан, балки фавран мустаҳкам кардани дониш тавассути иҷрои вазифаҳои хурд дар ин роҳ вуҷуд дошта бошад. RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 1 - 1Биёед оғоз кунем. Одатан мухолифони истифодаи ибораҳои муқаррарӣ ('RegEx' ё танҳо 'regex') дар барномасозӣ аз иқтибоси зерин истинод мекунанд, ки ба Ҷейми Завински марбут аст: "Баъзе одамон, вақте ки бо мушкилот рӯ ба рӯ мешаванд, фикр мекунанд, ки" ман медонам, ман ибораҳои муқаррариро истифода хоҳам кард. .'" Ҳоло онҳо ду мушкилот доранд". Дар асл, истифодаи ибораҳои муқаррарӣ ҳанӯз фикри хуб ё бад нест. Ва ин худ ба худ мушкилоте илова намекунад ва ҳеҷ яке аз онҳоро ҳал намекунад. Ин танҳо як асбоб аст. Ва чӣ гуна шумо онро истифода мекунед (дуруст ё нодуруст) муайян мекунад, ки шумо чӣ гуна натиҷаҳоро мебинед. Агар шумо кӯшиш кунед, ки regex-ро истифода баред, масалан, барои эҷоди таҳлилгари HTML, пас эҳтимоли зиёд дард хоҳед дошт . Аммо агар шумо танҳо хоҳед, ки масалан, тамғаҳои вақтро аз баъзе сатрҳо гиред, шумо эҳтимол хуб хоҳед буд. Барои осонтар кардани азхудкунии ибораҳои муқаррарӣ, ман ин дарсро ҷамъ овардам, ки ба шумо кӯмак мекунад, ки ибораҳои муқаррариро аз сифр бо ҳамагӣ бист қадами кӯтоҳ азхуд кунед. Ин дарсӣ асосан ба мафҳумҳои асосии ибораҳои муқаррарӣ тамаркуз мекунад ва танҳо дар ҳолати зарурӣ мавзӯъҳои пешрафтаро меомӯзад.

Қадами 1: Чаро ибораҳои муқаррариро истифода баред

RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 1 - 2Ифодаҳои муқаррарӣ барои ҷустуҷӯи мувофиқатҳо дар матн бо истифода аз намунаҳои (намунаҳои) муайяншуда истифода мешаванд. Бо истифода аз regex, мо метавонем ба осонӣ ва ба осонӣ аз матн калимаҳо , инчунин аломатҳои инфиродӣ ва мета ва пайдарпаии онҳоро, ки ба меъёрҳои муайян мувофиқанд, истихроҷ кунем. Ин аст он чизе ки Википедиа дар бораи онҳо ба мо нақл мекунад : Ибораҳои муқаррарӣ забони расмӣ барои ҷустуҷӯ ва коркарди зерсатрҳо дар матн дар асоси истифодаи метаҳарфаҳо (ҳарфҳои ваҳшӣ) мебошанд. Барои ҷустуҷӯ як сатри намунавӣ (намуди инглисӣ, дар русӣ онро аксар вақт «шаблон», «ниқоб» меноманд) истифода мешавад, ки аз рамзҳо ва метарамзҳо иборат буда, қоидаи ҷустуҷӯро муайян мекунад. Барои коркарди матн сатри ивазкунанда ба таври илова муайян карда мешавад, ки он метавонад аломатҳои махсусро низ дар бар гирад. Намуна метавонад мисли калимаи dogин ҷумла содда бошад:
Рӯбоҳи қаҳваранг зуд аз болои саги танбал ҷаҳида мешавад.
Ин ифодаи муқаррарӣ чунин менамояд:
саг
...Ба қадри кофӣ осон, ҳамин тавр не? Намуна инчунин метавонад ҳар як калимае бошад, ки ҳарфро дар бар мегирад o. Ифодаи муқаррарӣ барои дарёфти чунин намуна метавонад чунин бошад:
\ Вой * _
( Шумо метавонед ин ибораи муқаррариро дар ин ҷо санҷед .) Шумо хоҳед дид, ки баробари мураккаб шудани талаботи "мувофиқ" ифодаи муқаррарӣ низ мураккабтар мешавад. Шаклҳои иловагии қайдҳо барои муайян кардани гурӯҳҳои аломатҳо ва мувофиқ кардани намунаҳои такрорӣ мавҷуданд, ки ман дар зер шарҳ медиҳам. Аммо, вақте ки мо мувофиқатеро дар баъзе матн пайдо мекунем, пас мо бо он чӣ кор карда метавонем? Муҳаррикҳои муосири ифодаи муқаррарӣ ба шумо имкон медиҳанд, ки аломатҳо ё пайдарпайии аломатҳоро (зер сатрҳо) аз матни дарбаргиранда ҷудо кунед ё онҳоро хориҷ кунед ё онҳоро бо матни дигар иваз кунед. Умуман, ибораҳои муқаррарӣ барои таҳлил ва коркарди матн истифода мешаванд. Мо метавонем, масалан, зерсатрҳоеро, ки ба суроғаҳои IP монанданд, истихроҷ кунем ва сипас онҳоро тафтиш кунем. Ё мо метавонем номҳо ва суроғаҳои почтаи электрониро истихроҷ кунем ва онҳоро дар пойгоҳи додаҳо нигоҳ дорем. Ё барои дарёфти маълумоти ҳассос (ба монанди рақамҳои шиноснома ё рақамҳои телефон) дар паёмҳои электронӣ ибораҳои муқаррариро истифода баред ва корбарро огоҳ кунед, ки онҳо метавонанд худро зери хатар гузоранд. Regex воқеан як асбоби гуногунҷабҳаест, ки омӯхтан осон, аммо азхуд кардан душвор аст: "Чунон ки байни хуб навохтани як порчаи мусиқӣ ва эҷоди мусиқӣ фарқият вуҷуд дорад, байни донистани ибораҳои муқаррарӣ ва фаҳмидани онҳо фарқият вуҷуд дорад." - Ҷеффри E. F. Friedl, азхудкунии ифодаҳои муқаррарӣ

Қадами 2: Қавсҳои мураббаъ[]

Соддатарин ибораҳои муқаррарӣ, ки ба осонӣ фаҳмида мешаванд, инҳоянд, ки дар байни намунаи ифодаи муқаррарӣ ва сатри ҳадаф мувофиқати ҳар як аломатро ҷустуҷӯ мекунанд. Биёед, масалан, кӯшиш кунем, ки гурба пайдо кунем: RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 1 - 3
намуна: гурба
сатр: Гурба бурида шуд, вақте ки он зери мошин давида.
мувофиқат мекунад:      ^^
( Чӣ тавр он дар амал кор мекунад - дар ин ҷо нигаред ) НБ! Ҳамаи ҳалли ин ҷо танҳо ҳамчун ҳалли имконпазир оварда шудаанд. Дар ибораҳои муқаррарӣ, ба монанди барномасозӣ, шумо метавонед як масъалаҳоро бо роҳҳои гуногун ҳал кунед. Бо вуҷуди ин, ба ғайр аз муқоисаи қатъии аломат ба ҳарф, мо метавонем мувофиқати алтернативӣро бо истифода аз қавсҳои мураббаъ муайян кунем:
намуна: ca[rt]
сатр: Гурба бурида шуд, вақте ки он зери мошин давида.
бозихо:      ^^^ ^^^
( Чӣ тавр кор мекунад ) Кушодан ва пӯшидани қавсҳои мураббаъ ба муҳаррики ифодаи муқаррарӣ мегӯянд, ки он бояд ба ҳар як аломати муқарраршуда мувофиқат кунад, аммо танҳо як. Ибораи муқаррарии боло, масалан, тамоми калимаро намеёбад cart, балки танҳо як қисми онро пайдо мекунад:
намуна: ca[rt]
сатр: Гурба бурида шуд, вақте ки он зери ароба давида.
бозихо:      ^^^ ^^^
( Чӣ тавр кор мекунад ) Вақте ки шумо қавсҳои мураббаъро истифода мебаред, шумо ба муҳаррики ифодаи муқаррарӣ мегӯед, ки танҳо ба яке аз аломатҳои дар қавс мавҷудбуда мувофиқат кунад. Муҳаррик аломат cва баъд аломатро пайдо мекунад a, аммо агар аломати навбатӣ ё не r, tпас ин мувофиқати комил нест. Агар он пайдо кунад ca, ва он гоҳ ё r, ё t, он қатъ мешавад. Он кӯшиш намекунад, ки аломатҳои бештарро мувофиқ созад, зеро қавсҳои мураббаъ нишон медиҳанд, ки танҳо яке аз аломатҳои мавҷуда мувофиқат кардан лозим аст. Вақте ки онро меёбад , дар калимаи навбатӣ caпайдо мекунад ва қатъ мешавад, зеро он аллакай мувофиқатро барои пайдарпай пайдо кардааст . rcartcar

Ҳадафҳои омӯзиш:

Ибораи муқаррариро нависед, ки ба ҳамаи 10 намунаи hadин Hadпорчаи калимаҳои тарҷуманашаванда дар лаҳҷаи маҳаллӣ мувофиқат кунад:
намуна:
сатр: Ҷим, ки дар он ҷо Билл "дошта буд" , "дошта буд" . "Мебуд" дуруст буд.
Мувофиқат:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
( Дар ин ҷо ҳалли имконпазирро бубинед ) Дар бораи ҳамаи номҳои ҳайвонот дар ҷумлаи зерин чӣ гуфтан мумкин аст?
намуна:
сатр: Кӯршапарак, гурба ва каламуш ба бар даромаданд...
бозихо:    ^^^ ^^^ ^^^
( Ҳалли имконпазир ) Ё ҳатто соддатар: калимаҳоро пайдо кунед barё bat:
намуна:
сатр: Кӯршапарак, гурба ва каламуш ба бар даромаданд...
бозихо:    ^^^ ^^^
( Ҳалли имконпазир ) Ҳоло мо аллакай тарзи навиштани ибораҳои муқаррарии каму беш мураккабро омӯхтем ва мо танҳо дар қадами 2 ҳастем! Биёед идома диҳем!

Қадами 3: пайдарпаии фирор

RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 1 - 4Дар қадами қаблӣ, мо дар бораи қавсҳои мураббаъ []ва чӣ гуна онҳо ба мо дар ёфтани мувофиқати алтернативӣ бо истифода аз муҳаррики regex фаҳмидем. Аммо чӣ мешавад, агар мо хоҳем, ки гугирдҳоро дар шакли қавсҳои квадратии кушода ва пӯшида пайдо кунем []? Вақте ки мо мехостем мувофиқати ҳар як аломати калимаро пайдо кунем cat, мо муҳаррики регексро бо ин пайдарпаии аломатҳо таъмин кардем ( cat). Биёед кӯшиш кунем, ки қавсҳои мураббаъро []ҳамин тавр пайдо кунем:
намуна: [] 
сатр: Шумо бо истифода аз regex бо [] мувофиқат карда наметавонед! Шумо аз ин пушаймон хоҳед шуд!
мувофиқат: 
( Биё бубинем, ки чӣ шуд ) Аммо чизе кор накард... Ин аз он сабаб аст, ки аломатҳои қавси мураббаъ ҳамчун аломатҳои махсуси муҳаррики регекс амал мекунанд, ки одатан барои нишон додани чизи дигар истифода мешаванд ва намунаи аслӣ барои мувофиқ кардани онҳо нестанд. Тавре ки мо аз қадами 2 дар хотир дорем, онҳо барои дарёфти мувофиқати алтернативӣ истифода мешаванд, то муҳаррики regex ба ҳар як аломати дар байни онҳо мавҷудбуда мувофиқат кунад. Агар шумо дар байни онҳо ягон аломат нагузоред, он метавонад боиси хатоги шавад. Барои мувофиқ кардани ин аломатҳои махсус, мо бояд аз онҳо раҳо шавем ва пеш аз онҳо аломати баръакс гузорем \. Аксҳо (ё баръакс) аломати дигари махсусест, ки ба муҳаррики regex мегӯяд, ки аломати ояндаро айнан ҷустуҷӯ кунад, ба ҷои он, ки онро ҳамчун мета аломат истифода барад. Муҳаррики regex танҳо аломатҳоро меҷӯяд [ва ]аслан, агар ҳардуи онҳо бо хатти баръакс бошад:
намуна: \[\]
сатр: Шумо бо истифодаи regex бо [] мувофиқат карда наметавонед! Шумо аз ин пушаймон хоҳед шуд!
мувофиқат:                  ^^ 
( Биёед бубинем, ки ин дафъа чӣ шуд ) Хуб, агар мо хоҳем, ки худи хатти баръаксро пайдо кунем? Ҷавоб оддӣ аст. Азбаски хати хати рахна \низ як аломати махсус аст, аз он низ бояд гурехта шавад. Чӣ хел? Барқарор!
намуна: \\
сатр: C: \ Истифодабарандагон \ Tanja \ Тасвирҳо \ Dogs
мувофиқат мекунад:    ^ ^ ^ ^
( Як мисол дар амал ) Танҳо аломатҳои махсус бояд бо хатти баръакс гузошта шаванд. Ҳама аломатҳои дигар бо нобаёнӣ айнан тафсир карда мешаванд. Масалан, ифодаи муқаррарӣ tаслан танҳо tбо ҳарфҳои хурд мувофиқат мекунад:
намуна: т
сатр: tttt
мувофиқат мекунад: ^ ^ ^ ^
( Мисол ) Аммо, ин пайдарпаӣ \tба таври дигар кор мекунад. Ин як қолаб барои ҷустуҷӯи аломати ҷадвал аст:
намуна: \t
сатр: tttt
мувофиқат мекунад:   ^ ^ ^
( Мисол ) Баъзе пайдарпайии маъмулии фирор иборатанд аз \n(танаффусҳои сатри сабки UNIX) ва \r(дар танаффусҳои сатри сабки Windows истифода мешаванд \r\n). \rаломати "баргашти вагон" аст ва \nаломати "таъмини сатр" мебошад, ки ҳардуи онҳо дар баробари стандарти ASCII ҳангоми истифодаи густурда телетайпнависҳо муайян карда шудаанд. Дигар пайдарпаии гурези маъмулӣ дертар дар ин дарс баррасӣ хоҳанд шуд.

Дар ҳамин ҳол, биёед маводро бо якчанд муаммоҳои оддӣ мустаҳкам кунем:

Кӯшиш кунед, ки ифодаи муқаррариро нависед, то... ифодаи муқаррариро пайдо кунед;) Натиҷа бояд чунин бошад:
намуна:
string: ...ин regex ` \[\] ` бо regex мувофиқат кунед?
бозиҳо:                       ^^^^	
( Ҳалли ) Оё шумо идора кардед? Офарин! Ҳоло кӯшиш кунед, ки regex эҷод кунед, то пайдарпайии фирорро ба ин монанд ҷустуҷӯ кунед:
намуна:
сатр: ` \r `, ` \t ` ва ` \n` ҳама пайдарпайии фирор аз regex мебошанд.
мувофиқат мекунад:   ^^ ^^ ^^
( Ҳалли )

Қадами 4: "ҳар гуна" аломатро бо истифода аз нуқта ҷустуҷӯ кунед.

RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 1 — 5Ҳангоми навиштани пайдарпаии фирор бо мувофиқати ҳалли мувофиқат, ки мо дар қадами қаблӣ дидем, шумо шояд ҳайрон шуда бошед, ки "Оё ман метавонам аломати баръакс ва баъд ҳар гуна аломати дигаре, ки аз он пайравӣ мекунад, мувофиқат кунам?"... Албатта шумо метавонед! Боз як аломати махсусе вуҷуд дорад, ки барои мувофиқат (қариб) ҳар гуна аломат истифода мешавад - аломати нуқта (нуқта). Ин аст он чизе ки мекунад:
намуна: .
сатр: Бубахшед, Дэйв. Ман метарсам, ки ин корро карда наметавонам.
Мувофиқат: ^^^^^^^^^^^^^^^^^	
( Мисол ) Агар шумо фақат хоҳед, ки намунаҳоеро мувофиқ созед, ки ба пайдарпайии фирорӣ монанданд, шумо метавонед чунин кореро анҷом диҳед:
намуна: \\. 
сатр: Салом Уолмарт набераи ман аст, он ҷо номи ӯ " \n \r \t " аст.
мувофиқат мекунад:                                              ^^ ^^ ^^	
( Мисол ) Ва ба мисли ҳама аломатҳои махсус, агар шумо хоҳед, ки бо ҳарф мувофиқат кунед ., пас шумо бояд пеш аз он бо аломат гузоред \:
намуна: \. 
сатр: Ҷанг сулҳ аст . Озодӣ ғуломист . Нодонӣ қувват аст . 
мувофиқат мекунад:             ^ ^ ^
( мисол )

Қадами 5: Диапазони аломатҳо

RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 1 - 6Чӣ бояд кард, агар ба шумо ягон рамз лозим набошад, аммо танҳо мехоҳед дар матн ҳарфҳоро пайдо кунед? Ё рақамҳо? Ё садонок? Ҷустуҷӯ аз рӯи синфҳои аломатҳо ва диапазони онҳо ба мо имкон медиҳад, ки ба ин ноил шавем.
` \n `, ` \r ` ва ` \t ` аломатҳои холӣ мебошанд , ` \. `, ` \\ ` ва ` \[ ` нестанд .	
Ҳарфҳо , агар онҳо дар матн аломати намоён эҷод накунанд, "холӣ" мебошанд . Фосилаи " " фосила, танаффуси сатр ё ҷадвал аст. Фарз мекунем, ки мо мехоҳем пайдарпайии фирорро пайдо кунем, ки танҳо аломатҳои холигии фосиларо намояндагӣ мекунанд ва \nдар порчаи боло, вале на пайдарпаии гурези дигар. Чӣ тавр мо ин корро карда метавонистем? \r\t
намуна: \\[nrt] 
сатр: ` \n `, ` \r `, ва ` \t ` аломатҳои холигии ` \ мебошанд . `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат мекунад:   ^^ ^^ ^^	
( Мисол ) Ин кор мекунад, аммо ин ҳалли хеле шево нест. Чӣ мешавад, агар баъдтар ба мо лозим ояд, ки пайдарпаии фирорро барои аломати "хӯроки шакл" мувофиқ созем, \f? (Ин аломат барои нишон додани танаффусҳои саҳифа дар матн истифода мешавад.)
намуна: \\[nrt] 
сатр: ` \n `, ` \r `, ` \t `, ва ` \f ` аломатҳои холӣ мебошанд , ` \. `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат мекунад:   ^^ ^^ ^^	
( Ҳалли кор намекунад ) Бо ин равиш, мо бояд ҳар як ҳарфи хурдеро, ки мехоҳем мувофиқат кунем, дар қавси мураббаъ алоҳида номбар кунем. Роҳи осонтари ин кор ин истифодаи диапазони аломатҳо барои мувофиқат бо ҳарфи хурд аст:
намуна: \\[az] 
сатр: ` \n `, ` \r `, ` \t ` ва ` \f ` аломатҳои холигии ` \ мебошанд . `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат мекунад:   ^ ^ ^ ^ ^ ^ ^ ^ ^	
( Ва ин аллакай кор мекунад ) Диапазони аломатҳо тавре кор мекунанд, ки шумо интизор будед, бо назардошти мисоли боло. Қавсҳои мураббаъро дар атрофи ҳарфҳои аввал ва охирине, ки мехоҳед мувофиқат кунед, бо дефис дар байни онҳо ҷойгир кунед. Масалан, агар шумо танҳо хоҳед, ки "маҷмӯа"-и хатҳои баръакс \ва як ҳарф аз aро пайдо кунед m, шумо метавонед инҳоро иҷро кунед:
намуна: \\[am] 
сатр: ` \n `, ` \r `, ` \t `, ва ` \f ` аломатҳои холӣ мебошанд , ` \. `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат:                         ^^	
( Мисол ) Агар шумо хоҳед, ки диапазони сершуморро мувофиқ созед, онҳоро танҳо дар байни қавсҳои мураббаъ ҷойгир кунед:
намуна: \\[a-gq-z] 
сатр: ` \n `, ` \r `, ` \t `, ва ` \f ` аломатҳои холигии холӣ мебошанд , ` \. `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат мекунад:         ^^ ^^ ^^	
( Мисол ) Дигар диапазони аломатҳои маъмул иборатанд аз: A-Zва0-9

Биёед онҳоро дар амал санҷем ва якчанд мушкилотро ҳал кунем:

Рақамҳои шонздаҳӣ метавонанд рақамҳо 0-9ва ҳарфҳоро дар бар гиранд A-F. Вақте ки барои муайян кардани рангҳо истифода мешавад, рамзҳои шонздаҳӣ метавонанд ҳадди аксар се аломат дошта бошанд. Барои пайдо кардани рамзҳои шонздаҳӣ дар рӯйхати зерин ифодаи муқаррарӣ эҷод кунед:
намуна:
сатр: 1H8 4E2 8FF 0P1 T8B 776 42B G12
бозихо:      ^^^ ^^^ ^^^ ^^^	
( Ҳалли ) Бо истифода аз диапазони аломатҳо, ифодаи муқаррарӣ созед, ки yдар ҷумлаи зер танҳо ҳамсадоҳои хурдро (на садонокҳо, аз ҷумла ) интихоб кунад:
намуна:сатр 
: Т о т а л л и и м а лл а р , т о т а л и т а лл . _ _ _ _ 
Мувофиқат:   ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^^	
( Ҳалли )

Қадами 6: «не», карет, циркумфлекс, карет... аломат^

RegEx: 20 коротких шагов для освоения регулярных выражений. Часть 1 - 7Воқеан, барои ин рамз зиёда аз 9000 ном вуҷуд дорад :) Аммо, барои соддагӣ, шояд мо ба "не" тамаркуз кунем. Ҳалли масъалаи охирини ман каме дароз аст. Барои гуфтани "тамоми алифбо ба ҷуз садонокҳо" 17 аломат лозим буд. Албатта, роҳи осонтари ин кор вуҷуд дорад. Аломати "не" ^ба мо имкон медиҳад, ки аломатҳо ва диапазони аломатҳоро муайян кунем, ки набояд бо аломатҳои дар намуна нишон додашуда мувофиқат кунанд. Ҳалли соддатари масъалаи охирини дар боло овардашуда ин ёфтани аломатҳое мебошад, ки садонокҳоро ифода намекунанд:
намуна: [^aeiou] 
сатр:   The w a lls i n e m a ll a r e t o ta lly , т о т а л и т а лл. 
бозихо: ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 	
( Мисол ) Аломати "не" ^ҳамчун аломати чаптарин дар дохor қавсҳои мураббаъ []ба муҳаррики ифодаи муқаррарӣ мегӯяд, ки ба як (ҳар гуна) аломате, ки дар қавсҳои мураббаъ нест, мувофиқат кунад. Ин маънои онро дорад, ки ибораи муқаррарии дар боло зикршуда инчунин ба ҳамаи фосилаҳо, нуқтаҳо ., вергулҳо ,ва калонҳо Tдар аввали ҷумла мувофиқат мекунад. Барои истисно кардани онҳо, мо инчунин метавонем онҳоро дар қавсҳои мураббаъ ҷойгир кунем:
намуна: [ ^ aeiou .,T] сатр  
: Т х а ллс и и м а лл а р е т о т л и , т о т а л и т а лл . 
Мувофиқат:   ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^^	
( мисол ) Шарҳки дар ин маврид ба мо лозим нест, ки давраро бо хатти акиб гузорем, чунон ки пештар вакте ки мо онро бе истифода аз қавсҳои мураббаъ ҷустуҷӯ мекардем. Бисёре аз аломатҳои махсус дар қавсҳои мураббаъ ба маънои аслӣ коркард мешаванд, аз ҷумла аломати кушода [- аммо на пӯшида - ]аломати қавс (метавонед тахмин кунед, ки чаро?). Аломати баръакс \низ айнан маънидод карда намешавад. Агар шумо хоҳед, ки \бо истифода аз қавсҳои мураббаъ хати хати ростро мувофиқ кунед, пас шумо бояд аз он бо пеш аз он бо хати паси хати зерин раҳо кунед \\. Ин рафтор тавре тарҳрезӣ шудааст, ки аломатҳои фосила низ метавонанд дар қавсҳои мураббаъ барои мувофиқат ҷойгир карда шаванд:
намуна: [\t]
сатр: tttt
мувофиқат мекунад:   ^ ^ ^
( Мисол ) Аломати "не" ^метавонад бо диапазонҳо низ истифода шавад. Агар ман мехостам, ки танҳо аломатҳои a, b, c, x, yва z, -ро гирам, ман метавонистам чунин кор кунам:
намуна: [abcxyz] 
сатр:   abc defghijklmnopqrstuvw xyz 
мувофиқат: ^^^ ^^^
( Мисол ) ...ё, ман метавонам муайян кунам, ки ман мехоҳам ягон аломатеро пайдо кунам, ки дар байни ва нест : dw
намуна: [^dw] 
сатр:   abc defghijklmnopqrstuvw xyz 
мувофиқат: ^^^ ^^^
( Мисол ) Аммо,эҳтиёт шавбо "не" ^. Фикр кардан осон аст "Хуб, ман муайян кардам [^ b-f], бинобар ин ман бояд ҳарфи хурд aё чизеро пас аз - гирам f. Ин тавр нест. Ин регекс ба ҳар аломате, ки дар ин диапазон нест, мувофиқат мекунад, аз ҷумла ҳарфҳо, рақамҳо, аломатҳои пунктуатсия ва фосила.
намуна: [^dw] 
сатр:   abc defg h . i , j - klmnopqrstuvw xyz 
мувофиқат: ^^^ ^ ^ ^ ^ ^ ^ ^
( мисол )

Вазифаҳои сатҳи:

Аломати "не"-ро ^дар қавсҳои мураббаъ истифода баред, то ба ҳамаи калимаҳои дар поён овардашуда мувофиқат кунед, ки бо онҳо тамом намешаванд y:
намуна:
сатр: р?з сагу хог хас бог бай ray руб 
гугирд:      ^^^ ^^^ ^^^ ^^^	
( Ҳалли ) Бо истифода аз диапазон ва аломати "не" ифодаи муқаррариро нависед ^, то тамоми солҳоро дар байни солҳои 1977 ва 1982 пайдо кунед (бо назардошти):
намуна:
сатр: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
Мувофиқат:            ^^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^ ^^
( Ҳалли ) Ифодаи муқаррариро нависед, то ҳамаи аломатҳоеро пайдо кунед, ки аломати аломати "не" нестанд ^:
намуна:
сатр:   abc1 ^ 23*() 
мувофиқат мекунад: ^^^^ ^^^^^	
( Ҳалли )

Қадами 7: Синфҳои аломатҳо

Синфҳои аломатҳо ҳатто аз диапазони аломатҳо соддатаранд. Муҳаррикҳои гуногуни ифодаи муқаррарӣ синфҳои гуногун доранд, аз ин рӯ ман дар ин ҷо танҳо синфҳои асосиро фаро мегирам. (Тафтиш кунед, ки кадом versionи regex-ро шумо истифода мебаред, зеро шумораи онҳо метавонад бештар бошад - ё онҳо аз онҳое, ки дар ин ҷо нишон дода шудаанд, фарқ мекунанд.) Синфҳои аломатҳо тақрибан мисли диапазонҳо кор мекунанд, аммо шумо арзишҳои "оғоз" ва "охир" -ро муайян карда наметавонед:
Синф рамзҳо
\d "рақамҳо"[0-9]
\w "рамзҳои калима"[A-Za-z0-9_]
\s "фазоҳо"[ \t\r\n\f]
Синфи аломатҳои "калима" \wмахсусан муфид аст, зеро ин маҷмӯи аломатҳо аксар вақт барои идентификаторҳои дуруст (номҳои тағирёбанда, номҳои функсия ва ғ.) дар забонҳои гуногуни барномасозӣ лозим аст. Мо метавонем \wбарои содда кардани ифодаи муқаррарие, ки қаблан дида будем, истифода барем:
намуна: \\[az] 
сатр: ` \n `, ` \r `, ` \t ` ва ` \f ` аломатҳои холигии ` \ мебошанд . `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат мекунад:   ^ ^ ^ ^ ^ ^ ^ ^ ^	
Бо истифода аз \wин мо метавонем чунин нависем:
намуна: \\\w 
сатр: ` \n `, ` \r `, ` \t `, ва ` \f ` аломатҳои холигии ` \ мебошанд . `, ` \\ ` ва ` \[ ` нестанд .
мувофиқат мекунад:   ^ ^ ^ ^ ^ ^ ^ ^ ^	
( мисол )

2 вазифа барои муваффақият:

Тавре ки шумо ва ман медонем, дар Java, идентификатор (номи тағирёбанда, синф, функсия ва ғ.) метавонад танҳо бо ҳарфи a- zA- Z, аломати доллар $ё зерхатти оғоз шавад _. ( Албатта, хаткашӣ услуби бад аст, аммо мураттиб онро мепартояд, ёддошти тарҷумон ). Қисми боқимондаи аломатҳо бояд аломатҳои "калима" бошанд \w. Бо истифода аз як ё якчанд синфҳои аломатҳо, ифодаи муқаррариро барои ҷустуҷӯи идентификаторҳои дурусти Java дар байни пайдарпаии се аломати зерин эҷод кунед:
намуна:
сатр:   __e $ 12 .x2 foo Бар 3мм
бозихо: ^^^ ^^^ ^^^ ^^^	
( Ҳалли ) Рақамҳои амнияти иҷтимоии ИМА (SSN) рақамҳои 9-рақама дар формати XXX-XX-XXXX мебошанд, ки ҳар як X метавонад ҳар як рақам бошад [0-9]. Бо истифода аз як ё якчанд синфҳои аломатҳо, ифодаи муқаррариро нависед, то дар рӯйхати зер SSN-ҳои дуруст форматшударо пайдо кунед:
намуна:
сатр: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
бозихо:              ^^^^^^^^^^^
( Ҳалли ) RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 2. 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 3. RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 4.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION