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

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

Дар гурӯҳ нашр шудааст
RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 1 RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 2 20 қадамҳои кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ. Қисми 3. Ин қисми ниҳоӣ, дар мобайн, ба чизҳое дахл хоҳад кард, ки асосан аз ҷониби устодони ибораҳои муқаррарӣ истифода мешаванд. Аммо маводи қисмҳои қаблӣ барои шумо осон буд, дуруст? Ин маънои онро дорад, ки шумо метавонед ин маводро бо ҳамон осонӣ идора кунед! Асли ин ҷо RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Қисми 4 - 1 <h2>Қадами 16: гурӯҳҳо бидуни сабт (?:)</h2> RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 4-2Дар ду мисоли қадами қаблӣ мо матнеро сабт мекардем, ки ба мо воқеан лозим набуд. Дар вазифаи Андозаи файл, мо фосилаҳои пеш аз рақами якуми андозаи файлро гирифтем ва дар вазифаи CSV мо вергулҳоро байни ҳар як нишона гирифтем. Ба мо лозим нест, ки ин аломатҳоро гирем, аммо мо бояд онҳоро барои сохтори ифодаи муқаррарии худ истифода барем. Инҳо имконоти беҳтарин барои истифодаи гурӯҳ бидуни сабт, (?:). Гурӯҳи сабтнашаванда маҳз ҳамон чизеро иҷро мекунад, ки он ба назар мерасад - он имкон медиҳад, ки аломатҳо гурӯҳбандӣ карда шаванд ва дар ибораҳои муқаррарӣ истифода шаванд, аммо онҳоро дар гурӯҳи рақамгузорӣ сабт намекунад:
намуна: (?:")([^"]+)(?:") 
сатр: Ман танҳо мехоҳам "матни дохor ин нохунакҳо" .
Мувофиқат    
:             ^^^^^^^^^^^^^^^^              _    
( Мисол ) Ифодаи муқаррарӣ ҳоло ба матни иқтибосшуда ва инчунин аломатҳои иқтибосшуда мувофиқат мекунад, аммо гурӯҳи сабт танҳо матни иқтибосшударо гирифтааст. Чаро мо бояд ин корро кунем? Гап дар он аст, ки аксари муҳаррикҳои ифодаи муқаррарӣ ба шумо имкон медиҳанд, ки матнро аз гурӯҳҳои забти дар ифодаҳои муқаррарии шумо муайяншуда барқарор кунед. Агар мо метавонем ҳарфҳои иловагиро, ки ба мо лозим нестанд, бидуни дохил кардани онҳо ба гурӯҳҳои сабти худ бурида тавонем, он баъдтар таҳлил ва коркарди матнро осонтар мекунад. Ин аст тарзи тоза кардани таҳлилгари CSV аз қадами қаблӣ:
намуна: (?:^|,)\s*(?:\"([^",]*)\"|([^», ]*)) 
сатр:   a , " b ", " cd ", e , f , " gh ", dfgi ,, k , "", l 
мувофиқат мекунад: ^ ^ ^^^ ^ ^ ^^^ ^^^^ ^ ^ 
гурух:    2 1 111 2 2 111 2222 2 2    
( Мисол ) Якчанд чизҳое ҳастанд, ки бояд <mark>дар ин ҷо таваҷҷӯҳ кунем:</mark> Аввалан, мо дигар вергулҳоро сабт намекунем, зеро гурӯҳи сабткунандаро (^|,)ба гурӯҳи ғайризабт иваз кардем (?:^|,). Дуюм, мо гурӯҳи забткунандагонро дар дохor гурӯҳи ғайриасбӣ ҷойгир кардем. Ин вақте муфид аст, ки масалан, ба шумо як гурӯҳи аломатҳо лозим аст, ки бо тартиби мушаххас пайдо шаванд, аммо шумо танҳо ба як маҷмӯи ин аломатҳо аҳамият медиҳед. Дар ҳолати мо, барои дар нохунак пайдо шудани ҳарфҳои иқтибосӣ ва ғайривергул ба мо лозим буд , аммо дар[^",]* асл ба худи аломатҳои иқтибосӣ ниёз надоштем, аз ин рӯ онҳоро гирифтан лозим набуд . Ниҳоят, <mark>қайд кунед</mark>, ки дар мисоли дар боло овардашуда байни аломатҳои kва l. Нохунакҳо ""зерсатри ҷустуҷӯшуда мебошанд, аммо дар байни нохунакҳо аломатҳо вуҷуд надоранд, аз ин рӯ зерсатри мувофиқ ягон аломат (дарозии сифр) надорад. <h3>Оё мо дониши худро мустаҳкам кунем? Дар ин ҷо дувуним вазифаҳое ҳастанд, ки дар ин кор ба мо кӯмак мекунанд:</h3> Бо истифода аз гурӯҳҳои ғайрифаъол (ва сабти гурӯҳҳо ва синфҳои аломатҳо ва ғайра) ифодаи муқаррариро нависед, ки танҳо андозаи файлҳои дуруст форматшударо дар сатр сабт мекунад. дар зер:
намуна:
сатр:   6.6KB 1..3KB 12KB 5G 3.3MB KB .6.2TB 9MB .
бозихо: ^^^^^ ^^^^^^^^^^^^^^^^^ 
гурух:    11111 1111 11111 111    
( Ҳалли ) Tagҳои кушодани HTML бо , оғоз <ва анҷом меёбанд >. Tagҳои пӯшидани HTML аз пайдарпайии аломатҳо оғоз шуда </, бо аломат анҷом меёбанд >. Номи тег дар байни ин аломатҳо ҷойгир аст. Оё шумо метавонед ифодаи муқаррариро нависед, то танҳо номҳои тегҳои зеринро сабт кунед? (Шумо метавонед ин мушкилотро бидуни истифодаи гурӯҳҳои ғайрифаъолӣ ҳал кунед. Кӯшиш кунед, ки ин ду роҳро ҳал кунед! Як бор бо гурӯҳҳо ва як бор бидуни.)
намуна:
сатр:   <p> </span> <div> </kbd> <link> 
мувофиқат: ^^^ ^^^^^^ ^^^^^ ^^^^^^ ^^^^^^ 
гурӯҳ:    1 1111 111 111 1111    
( Ҳалли бо истифода аз гурӯҳҳои ғайризабт ) ( Ҳалли бидуни истифодаи гурӯҳҳои ғайризабт ) <h2>Қадами 17: Пайвандҳои бозгашт \Nва гурӯҳҳои сабти номшуда</h2> RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 4-3Ҳарчанд ман шуморо дар муқаддима ҳушдор додам, ки кӯшиши эҷоди таҳлилгари HTML бо истифода аз ибораҳои муқаррарӣ одатан ба дарди дил оварда мерасонад, ин мисоли охирин як хусусияти хуби дигар (баъзан) хусусияти муфиди аксари ибораҳои муқаррарӣ аст: истинодҳои бозгашт. Истинодҳои бозгашт ба гурӯҳҳои такрорӣ монанданд, ки шумо метавонед як матнро ду маротиба сабт кунед. Аммо онҳо дар як ҷанбаи муҳим фарқ мекунанд - онҳо танҳо як матнро, характер аз рӯи хислат мегиранд. Дар ҳоле, ки гурӯҳи такрорӣ ба мо имкон медиҳад, ки чунин чизеро сабт кунем:
намуна: (he(?:[az])+) 
сатр:   heyabcdefg эй эй heyellow heyyyyyyyy 
мувофиқат: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ 
гурух:    1111111111 111 1111 11111111 11111111111    
( Мисол ) ...пас пайванди бозгашт танҳо ба ин мувофиқат мекунад:
намуна: (he([az])(\2+)) 
сатр: heyabcdefg эй эй эй зард эййййййй 
мувофиқат:                              ^^^^^^^^^^^ 
гурӯҳ:                                 11233333333    
( Мисол ) Гурӯҳҳои такрории сабт вақте муфиданд, ки шумо мехоҳед бо як намуна такроран мувофиқат кунед, дар ҳоле ки истинодҳои бозгашт ҳангоми мувофиқат кардан бо ҳамон матн муфиданд. Масалан, мо метавонем истинодро истифода барем, то тегҳои мувофиқи кушода ва пӯшидани HTML пайдо кунем:
намуна: <(\w+)[^>]*>[^<]+<\/\1> 
сатр:   <span style="color: red">эй</span> 
мувофиқат мекунад: ^^^^^^^ ^^^^^^^^^^^^^^^^^ 
:    1111    
( Мисол ) <mark>Лутфан қайд кунед</mark>, ки ин як мисоли хеле соддашуда аст ва ман қатъиян тавсия медиҳам, ки ба шумо кӯшиш накунед, ки дар асоси HTML таҳлилгари ифодаи муқаррарӣ нависед. Ин синтаксиси хеле мураккаб аст ва эҳтимоли зиёд шуморо бемор мекунад. Гурӯҳҳои сабти номшуда ба истинодҳои бозгашт хеле монанданд, аз ин рӯ ман онҳоро дар ин ҷо ба таври мухтасар шарҳ медиҳам. Ягона фарқи байни истинодҳои бозгашт ва гурӯҳи сабти номшуда дар он аст, ки... гурӯҳи сабти номшуда дорои ном аст:
намуна: <(?<tag>\w+)[^>]*>[^<]+<\/(?P=tag)></tag> 
сатр:   <span style="color: red">эй< / SPAN> 
Мувофиқат: ^^^^^^^^^^^^^^^^^^^^^ 
1:    1111    
( Мисол ) Шумо метавонед бо истифода аз (?<ном>...) ё (?'ном'...) синтаксис (ифодаи муқаррарии ба .NET мувофиқ) ё бо ин синтаксис (?P<ном>) гурӯҳи номбаршудаи сабткунӣ эҷод кунед. ..) ё (?P'name'...) (Ифодаи муқаррарии бо Python мувофиқ). Азбаски мо PCRE (Perl Compatible Regular Expression) -ро истифода мебарем, ки ҳарду versionро дастгирӣ мекунад, мо метавонем якеро дар ин ҷо истифода барем. (Java 7 синтаксиси .NET-ро нусхабардорӣ кард, аммо танҳо versionи қавсҳои кунҷӣ. Эзоҳи тарҷумон) Барои такрор кардани гурӯҳи сабти номшуда дертар дар ифодаи муқаррарӣ, мо \<kname> ё \k'name' (.NET) ё (? P = ном) (Python). Боз ҳам, PCRE ҳамаи ин имконоти гуногунро дастгирӣ мекунад. Шумо метавонед бештар дар бораи гурӯҳҳои забти номбаршуда дар ин ҷо бихонед , аммо ин бештари он чизест, ки шумо воқеан дар бораи онҳо донед. <h3>Супориш барои кӯмак ба мо:</h3> Истинодҳои бозгаштро истифода баред, то ба ман дар ёд дошта бошам... ммм... номи ин шахс.
намуна:
сатр: "Салом, номи ман Ҷо аст." [баъдтар] "Номи он бача чист? Ҷо ?"
бозихо:        ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ 
гурух:                  111    
( Ҳалли ) <h2>Қадами 18: назар ба пеш ва ба қафо</h2> RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 4-4Ҳоло мо ба баъзе хусусиятҳои пешрафтаи ибораҳои муқаррарӣ мепардозем. Ман ҳама чизро то қадами 16 аксар вақт истифода мекунам. Аммо ин чанд қадами охирин танҳо барои одамоне мебошанд, ки regex-ро барои мувофиқ кардани ифодаҳои хеле мураккаб хеле ҷиддӣ истифода мебаранд. Ба ибораи дигар, устодони ибораҳои муқаррарӣ. "Ба пеш нигоҳ кардан" ва "ба ақиб нигоҳ кардан" метавонад хеле мураккаб ба назар расад, аммо онҳо дар ҳақиқат хеле мураккаб нестанд. Онҳо ба шумо имкон медиҳанд, ки кореро иҷро кунед, ки мо пештар бо гурӯҳҳои ғайрифаъолкунанда анҷом дода будем - санҷед, ки оё дарҳол пеш аз ё дарҳол пас аз матни воқеие, ки мо мувофиқат кардан мехоҳем ягон матн вуҷуд дорад. Масалан, фарз мекунем, ки мо мехоҳем танҳо ба номҳои чизҳое, ки ба одамон маъқуланд, мувофиқат кунем, аммо танҳо дар сурате, ки онҳо дар ин бора дилгарм бошанд (танҳо агар онҳо ҷумлаи худро бо аломати нидо хотима диҳанд). Мо метавонем чунин коре кунем:
намуна: (\ w +) (?=!) 
сатр: Ман мехоҳам мизи. Ман степлерро қадр мекунам. Ман чароғро дӯст медорам !
бозихо:                                           ^^^^ 
гурух:                                              1111    
( Мисол ) Шумо метавонед бубинед, ки чӣ гуна гурӯҳи сабти дар боло зикршуда (\w+), ки одатан ба ягон калимаи порча мувофиқат мекунад, танҳо бо калимаи чароғ мувофиқат мекунад. Назари мусбӣ ба пеш (?=!)маънои онро дорад, ки мо метавонем танҳо пайдарпайҳоеро, ки бо онҳо тамом мешаванд, мувофиқат кунем !, аммо мо воқеан ба худи аломати нидо мувофиқат намекунем. Ин як фарқияти муҳим аст, зеро бо гурӯҳҳои ғайрирасмӣ мо ба хислат мувофиқат мекунем, аммо онро забт намекунем. Бо нигоҳи пешӣ ва қафо, мо аломатеро барои сохтани ифодаи муқаррарии худ истифода мебарем, аммо он гоҳ мо ҳатто онро бо худ мувофиқ намекунем. Мо метавонем онро баъдтар дар ифодаи муқаррарии худ мувофиқ созем. Чаҳор намуди нигоҳи пеш ва паси назар вуҷуд дорад: нигоҳи мусбат (?=...), нигоҳи манфӣ (?!...), нигоҳи мусбат (?<=...) ва нигоҳи манфӣ (?<!. ..) . Онҳо он чизеро, ки ба назарашон монанд мекунанд, мекунанд - нигоҳи мусбӣ ба пеш ва паси назар имкон медиҳад, ки муҳаррики ифодаи муқаррарӣ мувофиқатро танҳо вақте идома диҳад, ки матне, ки дар назар/қафо нигоҳ дорад, воқеан мувофиқат кунад. Ба пеш нигоҳи манфӣ ва нигоҳи қафо баръакс амал мекунанд - онҳо имкон медиҳанд, ки регекс танҳо вақте мувофиқат накунад, ки матни дар назар ба пеш/аз ақиб ҷойгиршуда мувофиқат кунад. Масалан, мо мехоҳем, ки номҳои усулро танҳо дар як силсила пайдарпайии усулҳо мувофиқ созем, на an objectе, ки онҳо дар он амал мекунанд. Дар ин ҳолат, ҳар як номи усул бояд пеш аз .. Ифодаи муқаррарӣ бо истифода аз бозгашти оддӣ метавонад дар ин ҷо кӯмак кунад:
намуна: (?<=\.)(\w+) 
сатр: myArray. flatMap.aggregate.summarise.print !
Мувофиқат    
:         ^^^^ ^^^^ ^^^ ^^^ ^^^         ^^^    
( Мисол ) Дар матни боло мо ба ҳама гуна пайдарпайии аломатҳои калима мувофиқат мекунем \w+, аммо танҳо дар сурате, ки дар пеш аз онҳо аломати .. Мо метавонем бо истифода аз гурӯҳҳои ғайрифаъол чизе ба даст орем, аммо натиҷа каме бесарусомонтар аст:
намуна: (?: \.) (\ w +) 
сатр: myArray .flatMap.aggregate.summarise.print !
Мувофиқат    
:        ^^^^ ^^^^ ^^^ ^^^ ^^^         ^^^    
( Мисол ) Гарчанде ки он кӯтоҳтар аст, он ба аломатҳое мувофиқат мекунад, ки ба мо лозим нестанд. Гарчанде ки ин мисол ночиз ба назар мерасад, назарҳо ва назарҳо дар ҳақиқат метавонанд ба мо дар тоза кардани ибораҳои муқаррарии мо кӯмак кунанд. <h3>То ба охир хеле кам мондааст! 2 вазифаи зерин моро 1 қадам ба он наздиктар мекунад:</h3> Бозгашти манфӣ (?<!...) ба муҳаррики ифодаи муқаррарӣ имкон медиҳад, ки кӯшиши ҷустуҷӯи мувофиқро танҳо дар сурате идома диҳад, ки матни дар дохor ҷустуҷӯи манфӣ мавҷуд набошад. то қисми боқимондаи матн нишон дода мешавад, ки бо он шумо бояд мувофиқат пайдо кунед. Масалан, мо метавонем як ибораи муқаррариро истифода барем, то танҳо ба насабҳои заноне, ки дар конфронс иштирок мекунанд, мувофиқат кунанд. Барои ин мо мехоҳем боварӣ ҳосил кунем, ки насаби шахс дар пеш аз Mr.. Метавонед барои ин ибораи муқаррарӣ нависед? (Фарз кардан мумкин аст, ки фамorяҳо ҳадди аққал чаҳор аломат доранд.)
намуна:
сатр: ҷаноби Браун, хонум. Смит , хонум. Ҷонс , Мисс Дейзи , ҷаноби. Сабз
бозихо:                ^^^^^ ^^^^^ ^^^^^ 
гурух:                   11111 11111 11111    
( Ҳалли ) Фарз мекунем, ки мо пойгоҳи додаҳоро тоза карда истодаем ва мо сутуни маълумот дорем, ки фоизҳоро ифода мекунад. Мутаассифона, баъзе одамон ададҳоро ҳамчун қимати даҳӣ дар диапазон [0,0, 1,0] менавиштанд, дар ҳоле ки дигарон дар диапазон [0,0%, 100,0%] фоизҳо навиштаанд ва дигарон қиматҳои фоизро навиштаанд, вале аломати фоизиро фаромӯш кардаанд %. Бо истифода аз нигоҳи манфӣ (?!...), шумо метавонед танҳо он арзишҳоро қайд кунед, ки бояд фоиз бошанд, вале рақамҳо нестанд %? Инҳо бояд арзишҳо аз 1.00 зиёд бошанд, аммо бе паси %. (Ягон адад пеш аз нуқтаи даҳӣ ё баъд аз ду рақам зиёд буда наметавонад.) <mark>Дайд кунед</mark>, ки ин ҳалли ниҳоят мушкил аст . Агар шумо ин масъаларо бидуни нигоҳ ба ҷавоби ман ҳал карда тавонед, пас шумо аллакай дар ифодаҳои муқаррарӣ малакаҳои бузург доред!
намуна:
сатр: 0,32 100,00 5,6 0,27 98% 12,2% 1,01 0,99% 0,99 13,13 1,10 
баробар: 
^^^^^^         ^^^      ^^^^^^^^^^ 111111 111 111111111    
( Ҳалли ) <h2>Қадами 19: Шартҳо дар ибораҳои муқаррарӣ</h2> RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 4-5Мо ҳоло ба ҷое расидем, ки аксари одамон дигар ибораҳои муқаррариро истифода намебаранд. Мо эҳтимолан 95% ҳолатҳои истифодаро барои ифодаҳои оддии муқаррарӣ фаро гирифтаем ва ҳама корҳое, ки дар қадамҳои 19 ва 20 анҷом дода мешаванд, маъмулан бо забони мукаммалтари коркарди матн ба мисли awk ё sed (ё забони барномасозии таъиноти умумӣ) анҷом дода мешаванд. Гуфта мешавад, биёед идома диҳем, то бидонед, ки ифодаи муқаррарӣ воқеан чӣ кор карда метавонад. Гарчанде ки ифодаҳои муқаррарӣ пурра Turing нестанд , баъзе муҳаррикҳои ифодаи муқаррарӣ хусусиятҳоеро пешниҳод мекунанд, ки ба забони мукаммали барномасозӣ хеле монанданд. Яке аз чунин хусусиятҳо "вазъият" мебошад. Шартҳои Regex ба изҳороти if-then-else иҷозат медиҳанд, ки дар он шохаи интихобшуда бо "ба пеш нигоҳ кардан" ё "ба ақиб нигоҳ кардан" муайян карда мешавад, ки мо дар қадами қаблӣ дар бораи он фаҳмидем. Масалан, шумо метавонед танҳо сабтҳои дурустро дар рӯйхати санаҳо мувофиқат кунед:
намуна: (?<=Фев )([1-2][0-9])|(?<=Мар )([1-2][0-9]|3[0-1]) 
сатр: Санаҳои кор : 28 феврал , 29 феврал , 30 феврал, 30 март , 31 март  
Бозиҳо:                   ^^ ^^ ^^ ^^ 
гурӯҳ:                      11 11 22 22    
( Мисол ) <mark>Қайд кунед</mark>, ки гурӯҳҳои дар боло низ аз рӯи моҳ индексатсия карда мешаванд. Мо метавонем як ифодаи муқаррариро барои тамоми 12 моҳ нависем ва танҳо санаҳои дурустро сабт кунем, ки баъдан онҳо ба гурӯҳҳо аз рӯи моҳи сол индексатсия карда мешаванд. Дар боло як навъ сохтори шабеҳро истифода мебарад, ки танҳо дар гурӯҳи аввал мувофиқатҳоро ҷустуҷӯ мекунад, агар "Февр" пеш аз рақам бошад (ва ҳамин тавр барои дуюм). Аммо чӣ мешавад, агар мо мехостем, ки танҳо барои моҳи феврал коркарди махсусро истифода барем? Чизе ба монанди "агар рақам пеш аз "Февр" бошад, ин корро кунед, вагарна ин кори дигарро иҷро кунед." Ин аст, ки чӣ тавр шартҳо инро мекунанд:
намуна: (?(?<=Фев )([1-2][0-9])|([1-2][0-9]|3[0-1])) 
сатр: Санаҳои кор: 28 феврал , 29 феврал , 30 феврал, 30 март , 31 март  
Бозиҳо:                   ^^ ^^ ^^ ^^ 
гурӯҳ:                      11 11 22 22    
( Мисол ) Сохтори if-then-else ба монанди (?(Агар)then|else) ба назар мерасад, ки дар он ҷо (агар) бо "ба пеш нигоҳ кардан" ё "ба ақиб нигоҳ кардан" иваз карда мешавад. Дар мисоли боло, (агар) ҳамчун (?<=Feb). Шумо мебинед, ки мо санаҳои калонтар аз 29-ро мувофиқат кардем, аммо танҳо агар онҳо "Февр"-ро риоя накарданд. Истифодаи lookbehinds дар ибораҳои шартӣ муфид аст, агар шумо хоҳед, ки боварӣ ҳосил кунед, ки мувофиқат пеш аз ягон матн мавҷуд аст. Шартҳои мусбати назар метавонанд печида шаванд, зеро худи шарт ба ягон матн мувофиқат намекунад. Пас, агар шумо хоҳед, ки шарти if ягон вақт арзиш дошта бошад, он бояд бо пешгӯии зерин муқоиса карда шавад:
намуна: (?(?=дақиқ)дақиқ|дигар)wo 
сатр: exact else боз ду  
мувофиқати дигар:            ^^^^^^^ ^^^^^^
( Мисол ) Ин маънои онро дорад, ки шартҳои мусбати назар бефоидаанд. Шумо санҷед, ки оё ин матн дар пеш аст ва пас намунаи мувофиқеро пешниҳод кунед, ки пас аз он пайравӣ кунед. Ифодаи шартй дар ин чо ба мо тамоман ёрй намерасонад. Шумо инчунин метавонед танҳо дар боло бо ифодаи оддии оддӣ иваз кунед:
намуна: (?:exact|else)wo 
сатр: exact else дақиқдутои дигар  
:            ^^^^^^^ ^^^^^^
( Мисол ) Ҳамин тавр, қоидаи асосӣ барои ифодаҳои шартӣ ин аст: санҷиш, санҷиш ва боз санҷед. Дар акси ҳол, қарорҳое, ки ба назари шумо ошкоро ҳастанд, бо роҳҳои ҳаяҷоновар ва ғайричашмдошт ноком мешаванд :) <h3>Инак, мо ба блоки охирини вазифаҳое омадем, ки моро аз қадами ниҳоии 20-ум ҷудо мекунад:</h3> Ифодаи муқаррариро нависед, ки барои санҷидани он, ки калимаи навбатӣ бо ҳарфи калон оғоз мешавад, ифодаи шартии манфии назарро истифода мебарад. Агар ин тавр бошад, танҳо як ҳарфи калон ва сипас ҳарфҳои хурдро гиред. Агар не, ягон аломати калимаро гиред.
намуна:Стринг 
:   
Ҷонс    
Смит 9сфорд _ _ 22222 22222 11111 222222 111111111 222 111    
( Ҳалли ) Дар паси ифодаи шартӣ нигоҳи манфиеро нависед , ки матн ownsтанҳо дар сурати пеш аз он матн набошад clва матнро oudsтанҳо ҳангоми пеш аз он матн сабт кунад cl. (Каме як мисоли сохта, аммо шумо чӣ кор карда метавонед ...)
намуна:
сатр: Он масхарабозон соҳиби баъзе клоудҳо мебошанд . уд.
мувофиқат мекунад:              ^^^^ ^^^^   
( Ҳалли ) <h2>Қадами 20: Рекурсия ва омӯзиши минбаъда</h2> RegEx: 20 қадами кӯтоҳ барои азхудкунии ибораҳои муқаррарӣ.  Кисми 4-6Дарвоқеъ, дар муқаддимаи 20-қадамӣ дар ҳама гуна мавзӯъ чизҳои зиёде мавҷуданд ва ибораҳои муқаррарӣ истисно нестанд. Татбиқҳо ва стандартҳои гуногун барои ифодаҳои муқаррарӣ мавҷуданд , ки онҳоро дар Интернет пайдо кардан мумкин аст. Агар шумо хоҳед, ки маълумоти бештар гиред, ман тавсия медиҳам, ки аз сайти олиҷаноби regularexpressions.info бубинед , ин як истинодҳои афсонавӣ аст ва ман бешубҳа аз он ҷо дар бораи ибораҳои муқаррарӣ бисёр чизҳоро омӯхтам. Ман онро хеле тавсия медиҳам, инчунин regex101.com барои озмоиш ва нашри эҷодиёти шумо. Дар ин қадами ниҳоӣ, ман ба шумо дар бораи ибораҳои муқаррарӣ, яъне тарзи навиштани ифодаҳои рекурсивӣ маълумоти каме медиҳам. Рекурсияҳои оддӣ хеле соддаанд, аммо биёед фикр кунем, ки ин дар заминаи ифодаи муқаррарӣ чӣ маъно дорад. Синтаксиси рекурсияи оддӣ дар ифодаи муқаррарӣ чунин навишта мешавад: (?R)?. Аммо, албатта, ин синтаксис бояд дар дохor худи ифода пайдо шавад. Мо чӣ кор хоҳем кард, ин ифодаро дар дохor худ лона мекунем, шумораи худсарона. Барои намуна:
намуна: (эй(?R)?oh) 
сатр:   эй эй эййё эй эй эй эй эй эй эй эй эй эй эйёхох  
: ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ 
гурух:    11111 1111111111 1111111111    
( Мисол ) Азбаски ифодаи дохилшуда ихтиёрӣ аст ( (?R)аз паи ?), мувофиқати соддатарин ин аст, ки рекурсияро комилан нодида гирифтан. Пас, hey, ва сипас ohмувофиқат мекунад ( heyoh). Барои мувофиқ кардани ягон ифодаи мураккабтар аз ин, мо бояд дарёфтем, ки зерсатри мувофиқ дар дохor худ дар нуқтаи ифодае, ки мо (?R)пайдарпайро ворид кардем, лона гузоштааст. Ба ибораи дигар, мо метавонистем heyheyohoh ё heyheyohohoh ва ғайра пайдо кунем. Яке аз чизҳои олӣ дар бораи ин ибораҳои лона дар он аст, ки бар хилофи истинодҳои бозгашт ва гурӯҳҳои сабти ном, онҳо шуморо бо матни дақиқе, ки қаблан мувофиқат карда будед, маҳдуд намекунанд. Барои намуна:
намуна: ([Hh][Ee][Yy](?R)?oh) 
сатр:   heyoh heyyoh hEyHeYohoh эй oh heyhey hEyHeYHEyohohoh  
мувофиқат: ^^^^^ ^^^^^^^^^^ ^^^^^ ^^^^^^^^^^ 
гурух:    11111 1111111111 111111111111111    
( Мисол ) Шумо метавонед тасаввур кунед, ки муҳаррики ифодаи муқаррарӣ айнан ифодаи муқаррарии шуморо чанд маротиба ба худ нусхабардорӣ ва часбонад. Албатта, ин маънои онро дорад, ки баъзан он чизеро, ки шумо интизор будед иҷро намекунад:
намуна: ((?:\(\*)[^*)]*(?R)?(?:\*\))) 
сатр: (* шарҳ (* лона гузошташуда *) не *)
бозихо:            ^^^^^^^^^^^^ 
гурух:               111111111111    
( Мисол ) Метавонед бигӯед, ки чаро ин регекс танҳо шарҳи лонаро сабт кардааст, на шарҳи берунӣ? Як чиз аниқ аст: ҳангоми навиштани ибораҳои муқаррарии мураккаб ҳамеша онҳоро санҷед, то боварӣ ҳосил кунед, ки онҳо тавре кор мекунанд, ки шумо фикр мекунед. Ин митинги баландсуръат дар роххои ифодаи доимй ба охир расид. Умедворам, ки ин сафар ба шумо маъқул шуд. Хуб, ва ниҳоят, ман дар ин ҷо, тавре ки ман дар аввал ваъда дода будам, якчанд истинодҳои муфидро барои омӯзиши амиқтари мавод тарк мекунам:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION