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

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

Дар гурӯҳ нашр шудааст
RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 1. RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 2: Дар ин қисм мо ба чизҳое мегузарем, ки каме мураккабтаранд. Аммо азхуд кардани онхо мисли пештара душвор нест. Ман такрор мекунам, ки RegEx воқеан осонтар аз он аст, ки дар аввал ба назар мерасад ва ба шумо лозим нест, ки донишманди мушак бошед, то онро азхуд кунед ва онро дар амал истифода баред. Асли англисии ин мақола дар ин ҷост . 20 қадами кӯтоҳ барои азхуд кардани ибораҳои муқаррарӣ.  Қисми 3 - 1

Қадами 11: Қавс ()ҳамчун сабти гурӯҳҳо

20 қадами кӯтоҳ барои азхуд кардани ибораҳои муқаррарӣ.  Қисми 3 - 2Дар масъалаи охирин, мо намудҳои гуногуни арзишҳои бутун ва арзишҳои ададии нуқтаи шинокунандаро (нуқта) ҷустуҷӯ кардем. Аммо муҳаррики ифодаи муқаррарӣ байни ин ду намуди арзишҳо фарқ намекард, зеро ҳама чиз дар як ифодаи бузурги муқаррарӣ гирифта шудааст. Мо метавонем ба муҳаррики ифодаи муқаррарӣ бигӯем, ки байни намудҳои гуногуни мувофиқат фарқ кунад, агар мо намунаҳои хурди худро дар қавс иҳота кунем:
намуна: ([AZ])|([az]) 
сатр:   Президенти кунунии Боливия Эво Моралес аст .
Мувофиқат    
: ^^^ ^^^ ^^^ ^^ ^^ ^ ^^ ^ ^^ ^ ^^ ^ ^^ ^ ^^ ^ ^^ ^ ^^ 122 1222222  
( Мисол ) Ифодаи муқаррарии дар боло зикршуда ду гурӯҳи сабтро муайян мекунад, ки аз 1 сар карда индексатсия карда мешаванд. Гурӯҳи аввалини сабт ба ҳар як ҳарфи калон ва гурӯҳи дуюми сабт ба ҳар як ҳарфи хурди ягона мувофиқат мекунад. Бо истифода аз аломати "ё" |ва қавс ()ҳамчун гурӯҳи сабткунӣ, мо метавонем як ифодаи муқаррариро муайян кунем, ки ба якчанд навъҳои сатр мувофиқат мекунад. Агар мо инро ба регекси ҷустуҷӯии дароз/фаъол аз қисми пешинаи мақола татбиқ кунем, он гоҳ муҳаррики regex мувофиқатҳои мувофиқро дар гурӯҳҳои мувофиқ мегирад. Бо тафтиш кардани кадом гурӯҳ зерсатр мувофиқат мекунад, мо метавонем фавран муайян кунем, ки он арзиши шинокунанда аст ё арзиши дароз:
намуна: (\d*\.\d+[fF]|\d+\.\d*[fF]|\d+[fF])|(\d+[lL]) 
сатр:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0.
бозиҳо: ^^^ ^^^^ ^^ ^^ ^^^ 
гурӯҳ:    222 1111 22 11 111  
( Мисол ) Ин ибораи муқаррарӣ хеле мураккаб аст ва барои беҳтар фаҳмидани он, биёед онро тақсим кунем ва ба ҳар яке аз ин намунаҳо назар кунем:
( // ба ҳама зерсатри "флоат" мувофиқат мекунад
  \d*\.\d+[fF]
  |
  \d+\.\d*[fF]
  |
  \d+[fF]
)
| //Ё
( // ба ҳама зерсатри "дароз" мувофиқат мекунад
  \d+[lL]
)
Аломатҳо |ва гурӯҳҳои сабт дар қавс ()ба мо имкон медиҳанд, ки намудҳои гуногуни зерсатрҳоро мувофиқ созем. Дар ин ҳолат, мо ба рақамҳои нуқтаи шинокунанда ё ададҳои дарози "дароз" мувофиқат мекунем.
(
  \d*\.\d+[fF] // 1+ рақам дар тарафи рости нуқтаи даҳӣ
  |
  \d+\.\d*[fF] // 1+ рақам дар тарафи чапи нуқтаи даҳӣ
  |
  \d+[fF] // нуқта нест, танҳо 1+ рақам
)
|
(
  \d+[lL] // нуқта нест, танҳо 1+ рақам
)
Дар гурӯҳи забти "флоат" мо се интихоб дорем: рақамҳое, ки ҳадди аққал 1 рақам дар рости нуқтаи даҳӣ, рақамҳое, ки ҳадди аққал 1 рақам дар тарафи чапи нуқтаи даҳӣ доранд ва рақамҳое, ки нуқтаи даҳӣ надоранд. Ҳар яке аз онҳо то он даме, ки дар охири онҳо ҳарфҳои "f" ё "F" замима шудаанд, "шинокунанда" мебошанд. Дар дохor гурӯҳи забти "дароз" мо танҳо як интихоб дорем - мо бояд 1 ё зиёда рақам ва пас аз он аломати "l" ё "L" дошта бошем. Муҳаррики ифодаи муқаррарӣ ин зерсатрҳоро дар сатри додашуда ҷустуҷӯ мекунад ва онҳоро ба гурӯҳи мувофиқи забт индексатсия мекунад. Шарҳки мо ба ягон ракамхое, ки ба онхо ягон адад аз «l», «L», «f» ё «F» илова нашудаанд, мувофик нестем. Ин рақамҳоро чӣ гуна бояд гурӯҳбандӣ кард? Хуб, агар онҳо нуқтаи даҳӣ дошта бошанд, забони Java пешфарзро "дучанд" мекунад. Дар акси ҳол, онҳо бояд "int" бошанд.

Биёед чизҳои омӯхтаамонро бо якчанд муаммо муттаҳид кунем:

Ба regex дар боло боз ду гурӯҳи забти дигар илова кунед, то он рақамҳои дукарата ё intро тасниф кунад. (Ин боз як саволи душвор аст, рӯҳафтода нашавед, агар ин муддате тӯл кашад, ҳамчун чораи охирин ба ҳалли ман нигаред.)
намуна:
сатр:   42L 12 x 3.4f 6l 3.3 0F LF .2F 0. 
мувофиқат: ^^^ ^^^^^^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
гурух:    333 44 1111 33 222 11 111 22
( Ҳалли ) Масъалаи навбатӣ каме соддатар аст. Барои гурӯҳбандӣ кардани синну соли зерин, гурӯҳҳои сабти қавс (), аломати "ё" |ва диапазони аломатҳоро истифода баред: "Қонунӣ барои нӯшидан дар ИМА." (>= 21) ва "дар ИМА нӯшидан манъ аст" (<21):
намуна:
сатр:   7 10 17 18 19 20 21 22 23 24 30 40 100 120 
гӯгирд    
: ^ ^^ 22 22 22 22 22 11 11 11 11 11 11 111 111 
( Ҳалли )

Қадами 12: Аввалан мувофиқатҳои мушаххасро муайян кунед

20 қадами кӯтоҳ барои азхуд кардани ибораҳои муқаррарӣ.  Қисми 3 - 3Агар шумо кӯшиш кунед, ки "нӯшокиҳои қонунӣ" -ро ҳамчун гурӯҳи аввал, на гурӯҳи дуюм, муайян кунед, шумо дар иҷрои вазифаи охирин каме душворӣ доред. Барои фаҳмидани сабаб, биёед ба мисоли дигар назар кунем. Фарз мекунем, ки мо мехоҳем фамorяҳоеро, ки камтар аз 4 аломат доранд ва фамorяҳое, ки 4 ё зиёда аломат доранд, алоҳида сабт кунем. Биёед ба гурӯҳи аввалини забткунандагон номҳои кӯтоҳтар диҳем ва бубинем, ки чӣ мешавад:
намуна: ([AZ][az]?[аз]?)|([AZ][az][az][az]+) 
сатр:   Ким Ҷоб с Сю Кло йд Мох р Нго Рок к.
бозихо: ^^^ ^^^ ^ ^^^ ^^^ ^^^ ^^^ 
гурух:    111 111 11 111 111 111 111   
( Мисол ) Бо нобаёнӣ, аксари муҳаррикҳои ифодаи муқаррарӣ мувофиқати тамаъкорро бар зидди аломатҳои асосии мо то ҳол дидаем, истифода мебаранд. Ин маънои онро дорад, ки муҳаррики ифодаи муқаррарӣ гурӯҳи дарозтаринро дар ифодаи муқаррарии пешниҳодшуда ҳарчи зудтар муайян мекунад. Ҳамин тавр, гарчанде ки гурӯҳи дуюми боло метавонад аломатҳои бештареро дар номҳое ба мисли "Ҷобс" ва "Клойд" забт кунад, аммо азбаски се аломати аввали ин номҳо аллакай аз ҷониби гурӯҳи аввали забт гирифта шуда буданд, онҳо наметавонанд аз ҷониби дуюм дубора забт карда шаванд. . Акнун биёед як ислоҳи хурде анҷом диҳем - танҳо тартиби гурӯҳҳои забтро тағир диҳед ва дар аввал гурӯҳи мушаххастар (дарозтар) ҷойгир кунед:
намуна: ([AZ][az][az][az]+)|([AZ][az]?[az]?) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
бозихо: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
ГурУх:    222 1111 22 11111 1111 222 1111    
( мисол )

Вазифа... ин дафъа танҳо як :)

Намунаи "махсустар" қариб ҳамеша маънои "дарозтар" -ро дорад. Фарз мекунем, ки мо мехоҳем ду навъи "калима"-ро пайдо кунем: аввал онҳое, ки бо садонок оғоз мешаванд (аниқтараш), баъд онҳое, ки бо садонок оғоз намешаванд (ҳар калимаи дигар). Кӯшиш кунед, ки ифодаи муқаррарӣ нависед, то сатрҳоеро, ки ба ин ду гурӯҳ мувофиқат мекунанд, муайян кунед. (Гурӯҳҳои дар поён овардашуда ба ҷои рақамгузорӣ ҳарф шудаанд. Шумо бояд муайян кунед, ки кадом гурӯҳ бояд ба аввал ва кадоме ба дуюм мувофиқат кунад.)
намуна:
string:   pds6f uub 24r2gp ewqrty l ui_op 
мувофиқат: ^^^^^ ^^^ ^^^^^^ ^^^^^^ ^^^^^ 
гурух:    NNNNN ВВВ NNNNNN ВВВВВ Н ВВВВВ
( Ҳалли ) Умуман, ифодаи муқаррарии шумо ҳар қадар дақиқтар бошад, он ҳамон қадар тӯл мекашад. Ва ҳар қадар дақиқтар бошад, ҳамон қадар эҳтимоли гирифтани чизе, ки ба шумо лозим нест, камтар аст. Ҳамин тавр, гарчанде ки онҳо метавонанд даҳшатнок ба назар расанд, регексҳои дарозтар ~= регексҳои беҳтар. мутаассифона .

Қадами 13: Қавсҳои ҷингила {}барои шумораи муайяни такрорҳо

20 қадами кӯтоҳ барои азхуд кардани ибораҳои муқаррарӣ.  Кисми 3-4Дар мисоли насабҳо аз қадами қаблӣ, мо дар як намуна 2 гурӯҳи қариб такроршаванда доштем:
намуна: ([AZ][az][az][az]+)|([AZ][az]?[az]?) 
string:   Kim Jobs Xu Cloyd Mohr Ngo Rock .
бозихо: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
ГурУх:    222 1111 22 11111 1111 222 1111    
Барои гурӯҳи аввал ба мо насабҳои дорои чор ё зиёда ҳарф лозим буд. Ба гурӯҳи дуюм лозим омад, ки насабҳои дорои се ё камтар аз ҳарфро гиранд. Оё роҳи осонтаре барои навиштани ин аз такрори такрори ин [a-z]гурӯҳҳо вуҷуд дорад? Агар шумо барои ин қавсҳои ҷингиларо истифода баред, вуҷуд дорад {}. Қавсҳои ҷингила {}ба мо имкон медиҳанд, ки ҳадди ақал ва (ихтиёрӣ) шумораи максималии мувофиқати аломати қаблӣ ё гурӯҳи забтро муайян кунем. Се ҳолати истифода вуҷуд дорад {}:
{X} // дақиқ X маротиба мувофиқат мекунад
{X,} // мувофиқат >= X маротиба
{X,Y} // маротиба >= X ва <= Y мувофиқат мекунад
Инҳоянд намунаҳои ин се синтаксиси гуногун:
намуна: [az]{11} 
сатр:   humuhumunuk unukuapua'a.
бозихо: ^^^^^^^^^^^   
( мисол )
намуна: [az]{18,} 
сатр:   humuhumunukunukuapua 'a.
Мувофиқат: ^^^^^^    
( мисол )
намуна: [az]{11,18} 
сатр:   humuhumunukunukuap ua'a.
Мувофиқат: ^^^^^^    
( Мисол ) Дар мисолҳои боло чанд нуктаро бояд қайд кард.Шарҳ:. Аввалан, бо истифода аз қайди {X}, аломат ё гурӯҳи қаблӣ маҳз ҳамон адад (X) маротиба мувофиқат мекунад. Агар дар "калима" (назар ба рақами X) аломатҳои бештаре мавҷуд бошанд, ки метавонанд ба намуна мувофиқат кунанд (тавре ки дар мисоли аввал нишон дода шудааст), он гоҳ онҳо ба мувофиқат дохил карда намешаванд. Агар шумораи аломатҳо аз X камтар бошад, мувофиқати пурра ноком мешавад (дар мисоли аввал кӯшиш кунед, ки аз 11 ба 99 иваз кунед). Дуюм, қайдҳои {X,} ва {X,Y} хасисанд. Онҳо кӯшиш мекунанд, ки ҳарчӣ бештар аломатҳоро мувофиқат кунанд, дар ҳоле ки ифодаи муқаррарии додашударо қонеъ мекунанд. Агар шумо {3,7}-ро муайян кунед, пас аз 3 то 7 аломат мувофиқат кардан мумкин аст ва агар 7 аломати оянда дуруст бошад, ҳамаи 7 аломат мувофиқ карда мешавад. Агар шумо {1,}-ро муайян кунед ва ҳамаи 14 000 аломати оянда мувофиқат кунед, пас ҳамаи 14 000 аломати он ба сатри мувофиқ дохил карда мешаванд. Чӣ тавр мо метавонем ин донишро барои аз нав навиштани ифодаи дар боло зикршуда истифода барем? Оддӣтарин такмилдиҳӣ метавонад иваз кардани гурӯҳҳои ҳамсоя бошад [a-z], [a-z]{N}ки дар он N мувофиқан интихоб карда мешавад:
намуна: ([AZ][az]{2}[az]+)|([AZ][az]?[az]?)  
...аммо ин корро чандон бехтар намекунад. Ба гурӯҳи аввалини забт назар кунед: мо [a-z]{2}(ки ба 2 ҳарфҳои хурд мувофиқат мекунад) ва пас аз [a-z]+он (ки 1 ё зиёда ҳарфҳои хурд мувофиқат мекунад) дорем. Мо метавонем инро бо дархости 3 ё зиёда ҳарфҳои хурд бо истифода аз қавсҳои ҷингила содда кунем:
намуна: ([AZ][az]{3,})|([AZ][az]?[az]?) 
Гурӯҳи дуюми забткунӣ гуногун аст. Дар ин насабҳо ба мо на бештар аз се аломат лозим аст, ки ин маънои онро дорад, ки мо маҳдудияти боло дорем, аммо маҳдудияти поёнии мо сифр аст:
намуна: ([AZ][az]{3,})|([AZ][az]{0,2}) 
Хусусият ҳангоми истифодаи ибораҳои муқаррарӣ ҳамеша беҳтар аст, бинобар ин, дар он ҷо таваққуф кардан оқилона мебуд, аммо ман аҳамият дода наметавонам, ки ин ду диапазони аломатҳои ( [AZ]ва [az]) дар паҳлӯи ҳамдигар тақрибан ба синфи "аломати калима" монанданд, \w( [A-Za-z0-9_]) . Агар мо итминон дошта бошем, ки маълумоти мо танҳо насабҳои хуб форматшударо дар бар мегирад, пас мо метавонем ифодаи муқаррарии худро содда карда, ба таври оддӣ нависем:
намуна: (\w{4,})|(\w{1,3}) 
Гурӯҳи якум ҳама гуна пайдарпайии 4 ё бештар аз "аломатҳои калима" ( [A-Za-z0-9_]) -ро мегирад ва гурӯҳи дуюм ҳама пайдарпаии аз 1 то 3 "аломатҳои калима" (бо назардошти) -ро мегирад. Оё ин кор мекунад?
намуна: (\w{4,})|(\w{1,3}) 
сатр:   Ким Ҷобс Сю Клойд Мор Нго Рок .
бозихо: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
ГурУх:    222 1111 22 11111 1111 222 1111    
( Мисол ) Ин кор кард! Дар бораи ин равиш чӣ гуна аст? Ва он аз мисоли пешинаи мо хеле тозатар аст. Азбаски гурӯҳи аввалини сабт ба ҳамаи насабҳои дорои чор ё зиёда аломат мувофиқат мекунад, мо ҳатто метавонем гурӯҳи дуюми сабтро ба оддӣ иваз кунем \w+, зеро ин ба мо имкон медиҳад, ки ҳамаи насабҳои боқимондаро (бо 1, 2 ё 3 аломат) сабт кунем:
намуна: (\w{4,})|(\w+) 
сатр:   Ким Ҷобс Сю Клойд Мор Нго Рок .
бозихо: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
ГурУх:    222 1111 22 11111 1111 222 1111    
( мисол )

Биёед ба майна кӯмак кунем, ки инро омӯзад ва 2 мушкилоти зеринро ҳал кунад:

{}Барои аз нав навиштани ифодаи муқаррарии ҷустуҷӯи рақами амнияти иҷтимоӣ аз қадами 7 қавсҳои ҷингиларо истифода баред :
намуна:
сатр: 113-25=1902 182-82-0192 H23-_3-9982 1I1-O0-E38B
бозихо:              ^^^^^^^^^^^
( Ҳалли ) Фарз мекунем, ки санҷиши қавии парол дар вебсайт аз 6 то 12 аломат будани паролҳои корбарро талаб мекунад. Ифодаи муқаррариро нависед, ки паролҳои беэътиборро дар рӯйхат дар зер нишон медиҳад. Ҳар як парол барои мувофиқати осон дар қавс мавҷуд аст (), бинобар ин боварӣ ҳосил кунед, ки ифодаи муқаррарӣ бо аломатҳои аслӣ (ва рамзӣ оғоз ва анҷом меёбад. )Маслиҳат: боварӣ ҳосил кунед, ки қавсҳои аслиро дар паролҳо бо [^()]ё шабеҳ манъ кунед, вагарна шумо ба тамоми сатр мувофиқат хоҳед кард!
намуна:
сатр:   (12345) (пароли ман) (Xanadu.2112) (su_do) (OfSalesmen!)
Мувофиқат: ^^^^ ^^^^ ^^^^ ^^ ^^  
( Ҳалли )

Қадами 14: \bАломати сарҳади сифр

20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 3 — 5Вазифаи охирин хеле душвор буд. ""Аммо чӣ мешавад, агар мо бо ворид кардани паролҳо ба ҷои қавс ба нохунак онро каме мушкилтар кунем ()? Оё мо метавонем ҳалли шабеҳро бо иваз кардани ҳама аломатҳои қавс бо аломатҳои иқтибосӣ нависем?
намуна: \"[^"]{0.5}\"|\"[^"]+\s[^"]*\" 
string:   "12345" "пароли ман" "Xanadu.2112 " " su_do" " OfSalesmen! "
Мувофиқат: ^^^^ ^^^^ ^^^^^^ ^^^ ^^ ^^ ^^^  
( Мисол ) Он чандон таъсирбахш набуд. Оё шумо аллакай фаҳмидед, ки чаро? Мушкилот дар он аст, ки мо дар ин ҷо паролҳои нодурустро меҷӯем. "Xanadu.2112" пароли хуб аст, бинобар ин, вақте ки regex дарк мекунад, ки ин пайдарпаӣ фосила ё аломатҳои аслӣ надорад ", он танҳо пеш аз аломате ", ки паролро дар тарафи рост мувофиқ мекунад, медиҳад. (Азбаски мо муайян кардем, ки аломатҳоро "дар дохor паролҳо бо истифода аз . пайдо кардан ғайриимкон аст [^"].) Вақте ки муҳаррики ифодаи муқаррарӣ қаноатманд мешавад, ки ин аломатҳо ба ифодаи муқаррарии мушаххас мувофиқат намекунанд, он дубора кор мекунад, маҳз дар ҳамон ҷое, ки мондааст - дар ҷое, ки аломат буд ". Xanadu.2112" дар тарафи рост. Аз он ҷо ӯ як аломати фосилавӣ ва аломати дигарро мебинад "- барои ӯ ин пароли нодуруст аст! Асосан, вай ин пайдарпайро ёфта " ", пеш меравад. Ин умуман он чизе нест, ки мо ба даст овардан мехоҳем... Бисёр хуб мешуд, агар мо муайян кунем, ки аломати аввали парол набояд фосила бошад. Оё роҳи ин кор вуҷуд дорад? (То ҳол, шумо эҳтимол дарк кардаед, ки ҷавоб ба ҳама саволҳои риторикии ман "ҳа" аст.) Бале! Чунин роҳ вуҷуд дорад! Бисёре аз муҳаррикҳои ифодаи муқаррарӣ пайдарпайии фирорро ба мисли "сарҳади калима" таъмин мекунанд \b. "Сарҳади калима" \bпайдарпаии фирор бо паҳнои сифр аст, ки аҷиб аст, ки ба сарҳади калима мувофиқат мекунад. Дар хотир доред, ки вақте ки мо "калима" мегӯем, мо ё ҳар пайдарпаии аломатҳои синфро дар назар дорем \wё [A-Za-z0-9_]. Мутобиқати сарҳади калима маънои онро дорад, ки аломати бевосита пеш аз пайдарпай ё бевосита пас аз он бояд аломати калима \bбошад . неАммо, ҳангоми мувофиқат, мо ин аломатро ба зерсатри гирифташуда дохил намекунем. Ин паҳнои сифр аст. Барои дидани он, ки ин чӣ гуна кор мекунад, биёед як мисоли хурдро бубинем:
намуна: \b[^ ]+\b 
сатр:   Ve ҳанӯз vant ze money , Lebowski .
Мувофиқат: ^^ ^^^ ^^^ ^^ ^ ^ ^^ ^ ^^  
( Мисол ) Пайдарпай [^ ]бояд ба ҳар аломат мувофиқат кунад, ки аломати фазоии аслӣ нест. ,Пас, чаро ин ба вергул пас аз пул ё нуқтаи " пас аз Лебовский мувофиқат намекунад .? Ин аз он сабаб аст, ки вергул ,ва нуқта аломатҳои калима нестанд, аз ин рӯ сарҳадҳо байни аломатҳои калима ва аломатҳои ғайри калима эҷод карда мешаванд. Онҳо дар байни охири аломат .пайдо мешаванд. yкалимаи пул ва вергуле , ,ки пас аз он. Ифодаи муқаррарӣ ба ҳудуди ин калимаҳо мувофиқат мекунад (вале на дар аломатҳои ғайри калима, ки танҳо барои муайян кардани онҳо кӯмак мекунанд). Аммо чӣ мешавад, агар мо мувофиқатро дар қолаби худ дохил накунем ?i.\b
намуна: [^ ]+ 
сатр:   Ve ҳанӯз vant ze пул, Lebowski. 
Мувофиқат: ^^ ^^^ ^^^^ ^^ ^ ^ ^^ ^ ^^ ^^  
( Мисол ) Бале, ҳоло мо ин аломатҳои пунктуатсияро низ пайдо мекунем. Акнун биёед сарҳадҳои калимаро барои ислоҳи regex барои паролҳои иқтибосшуда истифода барем:
намуна: \"\b[^"]{0,5}\b\"|\"\b[^"]+\s[^"]*\b\" 
сатр:   "12345" "пароли ман" " Xanadu. 2112" "su_do" "Фурӯшандагон!"
Мувофиқат: ^^^^ ^^^^ ^^^^ ^^ ^^  
( Мисол ) Бо гузоштани сарҳадҳои калима дар дохor нохунак ("\b ... \b") мо ба таври муассир мегӯем, ки аломатҳои аввал ва охирини паролҳои мувофиқ бояд "аломатҳои калима" бошанд. Ҳамин тавр, ин дар ин ҷо хуб кор мекунад, аммо инчунин кор намекунад, агар аломати аввал ё охирини пароли корбар аломати калима набошад:
намуна: \"\b[^"]{0,5}\b\"|\"\b[^"]+\s[^"]*\b\"
сатр: "thefollowingpasswordistooshort" "C++"
мувофиқат:   
( Мисол ) Бубинед, ки чӣ тавр пароли дуюм ҳамчун "беэътибор" қайд карда нашудааст, гарчанде ки он хеле кӯтоҳ аст. Шумо бояд бошедэҳтиётбо пайдарпаӣ \b, зеро онҳо танҳо ба сарҳадҳои байни аломатҳо мувофиқат мекунанд \w, на \w. Дар мисоли боло, азбаски мо ба аломатҳо иҷозат надодем, дар паролҳо \w, сарҳади байни \ва аломати аввал/охирини парол кафолат дода намешавад, ки сарҳади калима бошад \b.

Барои анҷом додани ин қадам, мо танҳо як масъалаи оддиро ҳал мекунем:

Сарҳадҳои калимаҳо дар муҳаррикҳои равшансозии синтаксис муфиданд, вақте ки мо мехоҳем бо пайдарпаии мушаххаси аломатҳо мувофиқат кунем, аммо мехоҳем боварӣ ҳосил кунем, ки онҳо танҳо дар аввал ё охири калима (ё худашон) меоянд. Фарз мекунем, ки мо равшансозии синтаксисро менависем ва мехоҳем калимаи varро таъкид кунем, аммо танҳо вақте ки он худ ба худ пайдо мешавад (бидуни ламс кардани аломатҳои дигари калима). Метавонед барои ин ибораи муқаррарӣ нависед? Албатта шумо метавонед, ин як вазифаи хеле содда аст;)
намуна:
сатр:   var varx _var ( var j) barvarcar * var var -> { var }
бозихо: ^^^ ^^^ ^^^ ^^^ ^^^  
( Ҳалли )

Қадами 15: "карет" ^ҳамчун "оғози сатр" ва аломати доллар $ҳамчун "охири сатр"

20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 3 - 6Пайдарпайвандии калимаи сарҳадӣ \b(аз қадами охирини қисми пешинаи мақола) ягона пайдарпаии махсуси сифрӣ нест, ки барои истифода дар ибораҳои муқаррарӣ дастрас аст. Ду маъмултарин "карет" ^- "оғози сатр" ва аломати доллар $- "охири сатр" мебошанд. Дохил кардани яке аз инҳо ба ибораҳои муқаррарии шумо маънои онро дорад, ки мувофиқат бояд дар аввал ё охири сатри манбаъ пайдо шавад:
намуна: ^start|end$ 
сатр:   start end start end start start end start ends 
matches: ^^^^^ ^^^  
( Мисол ) Агар сатри шумо танаффусҳои сатр дошта бошад, он ^startба пайдарпаии "оғоз" дар оғози ҳама сатр мувофиқат мекунад ва end$ба пайдарпаии "охир" дар охири ҳар сатр мувофиқат мекунад (гарчанде ки дар ин ҷо нишон додан душвор аст). Ин аломатҳо махсусан ҳангоми кор бо маълумоте муфиданд, ки дорои ҷудокунандаҳо мебошанд. ^Биёед аз қадами 9 бо истифода аз "оғози сатр" ба масъалаи "андозаи файл" баргардем . Дар ин мисол, андозаи файлҳои мо бо фосилаҳои " " ҷудо карда шудаанд. Ҳамин тавр, мо мехоҳем, ки ҳар як андозаи файл бо рақаме оғоз шавад, ки пеш аз аломати фосила ё оғози сатр ҷойгир аст:
намуна: (^| )(\d+|\d+\.\d+)[KMGT]B 
сатри:   6.6KB 1..3KB 12KB 5G 3.3MB KB .6.2TB 9MB .
вохӯриҳо: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
гурӯҳ:    222 122 1222 12    
( Мисол ) Мо аллакай ба ҳадаф наздик ҳастем! Аммо шумо метавонед аҳамият диҳед, ки мо то ҳол як мушкor хурд дорем: мо аломати фосиларо пеш аз андозаи дурусти файл мувофиқ мекунем. Ҳоло мо метавонем ин гурӯҳи забткунандаро (1) вақте ки муҳаррики ифодаи муқаррарии мо онро пайдо мекунад, сарфи назар кунем, ё мо метавонем як гурӯҳи забтнашавандаро истифода барем, ки онро дар қадами оянда мебинем.

Дар ҳамин ҳол, биёед ду масъалаи дигарро барои оҳанг ҳал кунем:

Бо мисоли равшансозии синтаксиси мо аз қадами охирин идома дода, баъзе равшансозии синтаксис фосилаҳои пасипардагиро, яъне ҳама фосилаҳоеро, ки дар байни аломати холии бефосила ва охири сатр меоянд, қайд мекунад. Оё шумо метавонед регексро нависед, то танҳо ҷойҳои паси онро таъкид кунед?
намуна:
сатр: myvec <- c(1, 2, 3, 4, 5)  
бозиҳо:                          ^^^^^^  
( Ҳалли ) Таҳлилгари оддии қимати бо вергул ҷудошуда (CSV) "нишонаҳое"-ро, ки бо вергул ҷудо шудаанд, ҷустуҷӯ мекунад. Умуман, фазо маънои онро надорад, агар он ба нохунак дохил карда нашавад "". Ифодаи муқаррарии таҳлor CSV-ро нависед, ки бо аломатҳои байни вергулҳо мувофиқат мекунад, аммо фазои сафедро, ки дар байни нохунакҳо нест , нодида мегирад (забт намекунад).
намуна:
сатр:   a, "b", "c d", e,f, "g h", dfgi,, k, "", l 
мувофиқат мекунад: ^^ ^^^^ ^^^^^^^^^^ ^^^ ^^^ ^^^^^^ ^^ ^^^ ^ 
гурух:    21 2221 2222212121 222221 222211 21 221 2    
( Ҳалли ) RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 4.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION