JavaRush /Java блогу /Random-KY /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 тапшырмасында ар бир белгинин ортосундагы үтүрлөрдү жаздык. Бизге бул белгилерди тартуунун кереги жок, бирок аларды кадимки туюнтмабыздын структурасын түзүү үчүн колдонушубуз керек. Бул топту тартуусуз колдонуу үчүн идеалдуу варианттар, (?:). Басып чыкпаган топ так ушундай угулат - ал символдорду топтоого жана кадимки туюнтмаларда колдонууга мүмкүндүк берет, бирок аларды номерленген топко тартпайт:
үлгү: (?:")([^"]+)(?:") 
сап: Мен "бул тырмакчалардын ичиндеги текстти" гана каалайм .
Матчтар    
:             4.41111111111111111111111              _    
( Мисалы ) Кадимки туюнтма эми цитаталанган текстке жана цитата символдоруна дал келет, бирок тартуу тобу цитаталанган текстти гана басып алды. Эмне үчүн биз муну кылышыбыз керек? Кептин баары кадимки туюнтма кыймылдаткычтарынын көбү кадимки туюнтмаларыңызда аныкталган басып алуу топторунан текстти калыбына келтирүүгө мүмкүндүк берет. Бизге кереги жок кошумча символдорду аларды тартуу топторубузга кошпостон кыркып алсак, анда бул текстти кийинчерээк талдоо жана башкарууну жеңилдетет. Мурунку кадамдан CSV талдоочусун кантип тазалоо керек:
үлгү: (?:^|,)\s*(?:\"([^",]*)\"|([^», ]*)) 
сап:   a , " b ", " cd ", e , f , " gh ", dfgi ,, k , "", l 
дал келет: ^ ^ ^^^ ^ ^ ^^^ ^^^^ ^ ^ 
топ:    2 1 111 2 2 111 2222 2 2    
( Мисал ) Бул жерде <mark>байкала турган бир нече нерселер бар:</mark> Биринчиден, биз басып алуу тобун басып албоочу (^|,)топко өзгөрткөндүктөн, биз мындан ары үтүрлөрдү тартпайбыз (?:^|,). Экинчиден, биз басып алуу тобун колго түшүрбөгөн топтун ичине киргиздик. Бул, мисалы, белгилүү бир тартипте пайда болушу үчүн белгилердин тобу керек болгондо пайдалуу, бирок сиз ал белгилердин бир бөлүгүнө гана кам көрөсүз. Биздин учурда, тырмакчанын ичинде пайда болушу үчүн бизге тырмакчасыз символдор жана үтүрлөр керек болчу , бирок чындыгында[^",]* бизге тырмакчадагы символдор керек эмес, ошондуктан аларды басып алуунун кереги жок болчу . Акырында, жогорудагы мисалда kжана символдорунун ортосунда нөлгө барабар узундуктагы дал келүү бар экенин <mark>эске алыңыз</mark> l. Тырмакчалар ""изделген субсап болуп саналат, бирок тырмакчалардын ортосунда символдор жок, андыктан дал келген ички сапта символдор жок (узундугу нөл). <h3>Бorмибизди бекемдейлиби? Бул жерде бизге эки жарым тапшырма жардам берет:</h3> Жазылбаган топторду (жана басып алуу топторун жана символдор класстарын ж.б.) колдонуп, сапта туура форматталган файл өлчөмдөрүн гана тарткан кадимки туюнтманы жазыңыз. төмөндө:
үлгү:
сап:   6.6KB 1..3KB 12KB 5G 3.3MB КБ .6.2KB 9MB .
дал келет: ^^^^^ ^^^^^ ^^^^^^ ^^^^ 
топ:    11111 1111 11111 111    
( Чечим ) HTML ачуу тэгдери менен башталып <, менен аяктайт >. HTML жабуу тэгдери символдордун ырааттуулугу менен башталып </, тамга менен аяктайт >. Tag аты бул белгилердин ортосунда камтылган. Төмөнкү тегдердеги аттарды гана жазуу үчүн кадимки туюнтманы жаза аласызбы? (Басылмай турган топторду колдонбостон бул маселени чече аласыз. Бул эки жолду чечип көрүңүз! Бир жолу топтор менен, бир жолу жок.)
үлгү:
сап:   <p> </span> <div> </kbd> <link> 
дал келет: ^^^ ^^^^^^ ^^^^^ ^^^^^^ ^^^^^^ 
топ:    1 1111 111 111 1111    
( Капталбаган топторду колдонуу менен чечим ) ( Басып албоочу топторду колдонбостон чечим ) <h2>17-кадам: Backlinks \Nжана аталган басып алуу топтору</h2> RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  4-3-бөлүкКириш сөздө мен сизге адатта кадимки туюнтмаларды колдонуп HTML талдоочу түзүүгө аракет кылып жатканын эскерткен элем. жүрөк оорусуна алып келет, бул акыркы мисал көпчүлүк туруктуу сөз айкаштарынын дагы бир (кээде) пайдалуу өзгөчөлүгүнө жакшы сегу болуп саналат: артка шилтемелер. Backlinks бир эле текстти эки жолу басып алууга аракет кыла турган кайталанган топторго окшош. Бирок алар бир маанилүү аспект менен айырмаланат - алар бир эле текстти, мүнөзү боюнча гана басып алышат. Кайталануучу топ бизге ушул сыяктуу нерсени тартууга мүмкүндүк берет:
үлгү: (he(?:[az])+) 
сап:   heyabcdefg эй heyo heyellow heyyyyyyyyyy 
дал келет: ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^ 
топ:    1111111111 111 1111 11111111 11111111111    
( Мисалы ) ...анда backlink бул гана дал келет:
үлгү: (he([az])(\2+)) 
сап: heyabcdefg эй эйо heyellow эййййййййй 
дал келет:                              ^^^^^^^^^^^ 
топ:                                 11233333333    
( Мисалы ) Кайталануучу тартуу топтору бир эле үлгүгө кайра-кайра дал келгиңиз келсе, пайдалуу, ал эми бир эле текстке дал келүүнү кааласаңыз, артка шилтемелер жакшы. Мисалы, биз дал келген ачуу жана жабуу HTML тэгдерин табуу үчүн backlink колдонсок болот:
үлгү: <(\w+)[^>]*>[^<]+<\/\1> 
сап:   <span style="color: red">эй</span> 
дал келет: ^^^^^^^ 1111 
_    _    
( Мисал ) Бул өтө жөнөкөйлөштүрүлгөн мисал экенин <mark>Көңүл буруңуз</mark> жана мен сизге кадимки туюнтма негизиндеги HTML талдоочу жазууга аракет кылбооңузду катуу сунуштайм. Бул өтө татаал синтаксис жана сизди оорутуп коюшу мүмкүн. Аты аталган басып алуу топтору Backlinks менен абдан окшош, ошондуктан мен бул жерде аларды кыскача айтып берем. Арткы шилтемелер менен аталган басып алуу тобунун ортосундагы бир гана айырмачылык... аталган басып алуу тобунун аталышы бар:
үлгү: <(?<tag>\w+)[^>]*>[^<]+<\/(?P=tag)></tag> 
сап:   <span style="color: red">эй< / span 
>    Матчтар 
:    
( Мисал ) Сиз (?<name>...) же (?'name'...) синтаксисин (.NET менен туура келген регулярдуу туюнтма) же ушул синтаксис менен (?P<name>) колдонуп, аталган басып алуу тобун түзө аласыз. ..) же (?P'name'...) (Python менен шайкеш туруктуу туюнтма). Биз эки versionны тең колдогон PCRE (Perl Compatible Regular Expression) колдонуп жаткандыктан, бул жерде бирин да колдоно алабыз. (Java 7 .NET синтаксисин көчүргөн, бирок бурчтуу кашаалардын versionсы гана. Котормочунун эскертүүсү) Аты аталган басып алуу тобун кийинчерээк кадимки туюнтмада кайталоо үчүн, биз \<kname> же \k'name' (.NET) же (? P = аты) (Python). Дагы, PCRE бул ар кандай варианттардын баарын колдойт. Сиз бул жерден аталган басып алуу топтору жөнүндө көбүрөөк окуй аласыз , бирок бул сиз алар жөнүндө бorшиңиз керек болгон нерселердин көбү эле. <h3>Бизге жардам берүү үчүн тапшырма:</h3> Мага эстеп калууга жардам берүү үчүн шилтемелерди колдонуңуз... ммм... бул адамдын атын.
үлгү:
string: "Салам менин атым Джо." [кийин] "Ал жигиттин аты ким? Жо ?"
матчтар:        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^ 
топ:                  111    
( Чечим ) <h2>18-кадам: алдыга жана артка кароо</h2> RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  4-4-бөлүкЭми биз кадимки сөз айкаштарынын айрым өркүндөтүлгөн өзгөчөлүктөрүнө токтолобуз. Мен 16-кадамга чейин баарын көп колдоном. Бирок бул акыркы кадамдар өтө татаал туюнтмаларга дал келүү үчүн регексти өтө олуттуу колдонгон адамдар үчүн гана. Башкача айтканда, туруктуу сөз айкаштарынын чеберлери. "Алдыга кароо" жана "артка кароо" өтө татаал сезorши мүмкүн, бирок алар чындыгында өтө татаал эмес. Алар сизге мурда басып албоочу топтор менен жасаган ишибизге окшош нерсени жасоого мүмкүндүк берет - биз дал келүүнү каалаган тексттин алдында же андан кийин дароо текст бар-жогун текшериңиз. Мисалы, биз адамдарга жаккан нерселердин атын гана дал келтирүүнү каалайбыз дейли, бирок алар шыктануу менен гана (сүйлөмдү илеп белгиси менен аяктаса гана). Биз бир нерсе кыла алабыз:
үлгү: (\w+)(?=!) 
сап: Мага стол жагат. Мен степлерди баалайм. Мен чыракты жакшы көрөм !
матчтар:                                           ^^^^ 
группасы:                                              1111    
( Мисал ) Сиз жогорудагы басып алуу тобу (\w+), адатта үзүндүдөгү кандайдыр бир сөзгө дал келген чырак сөзүнө кантип дал келерин көрө аласыз. Позитивдүү алдыга көз салуу (?=!)биз менен аяктаган ырааттуулуктарга гана дал келээрибизди билдирет !, бирок илеп белгисинин өзүнө дал келбейт. Бул маанилүү айырмачылык, анткени басып албаган топтор менен биз каарманга дал келет, бирок аны кармай албайбыз. Алдыны жана артты карап туруп, биз кадимки сөз айкашыбызды түзүү үчүн символду колдонобуз, бирок андан кийин аны өзүнө да дал келтирбейбиз. Биз аны кийинчерээк кадимки сөз айкашыбызда дал келтире алабыз. Алдыга жана артка кароонун төрт түрү бар: оң көз караш (?=...), терс көз караш (?!...), оң көз караш (?<=...) жана терс көз караш (?<!. ..) . Алар кандай угулса, ошону жасашат - оң көз караш жана артка карап туруу кадимки туюнтма кыймылдаткычына алдыга/артына карап камтылган текст чындап дал келгенде гана дал келүүнү улантууга мүмкүндүк берет. Терс алдыга көз салуу жана артка кароо тескерисин жасашат - алар алдыга/артына кароодо камтылган текст дал келбегенде гана регекстин дал келишине мүмкүндүк берет. Мисалы, биз метод аттарын алар иштеген an objectке эмес, метод тизмегинин тизмегине гана дал келтиргибиз келет. Бул учурда, ар бир методдун аталышынын алдында .. Жөнөкөй кайра карап чыгууну колдонгон кадимки сөз айкашы бул жерде жардам берет:
үлгү: (?<=\.)(\w+) 
сап: myArray. flatMap.aggregate.summarise.print !
дал келет:         ^^^^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^ 
группа:            1111111 111111111 111111111 11111    
( Мисал ) Жогорудагы текстте биз сөздүн символдорунун каалаган ырааттуулугун дал келтиребиз \w+, бирок алардын алдында символ болсо гана .. Биз басып албаган топтордун жардамы менен окшош нерсеге жетише алабыз, бирок натыйжа бир аз татаалыраак:
үлгү: (?:\.)(\w+) 
сап: myArray .flatMap.aggregate.summarise.print !
дал келүүлөр:        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
группа:            1111111 111111111 111111111 11111    
( Мисалы ) Кыскараак болсо да, ал бизге кереги жок символдорго дал келет. Бул мисал анча маанилүү эместей көрүнгөнү менен, алдыга көз салуу жана артка издөө кадимки сөз айкаштарын тазалоого жардам берет. <h3>Фиреге аз калды! Төмөнкү 2 тапшырма бизди ага 1 кадам жакындатат:</h3> Терс издөө (?<!...) регулярдуу туюнтма кыймылдаткычына терс издөөнүн ичинде камтылган текст жок болсо гана дал келүүнү улантууга мүмкүндүк берет. тексттин калган бөлүгүнө чейин көрсөтүлөт, ага дал келүүнү табышыңыз керек. Мисалы, конференцияга катышкан аялдардын фамorяларын гана дал келтирүү үчүн туруктуу сөз айкашын колдонсок болот. Бул үчүн, биз адамдын фамorясынын алдында Mr.. Бул үчүн туруктуу сөз айкашын жаза аласызбы? (Surnameлар, бери дегенде, төрт белгиден турат деп болжолдоого болот.)
үлгү:
сап: Mr. Браун, айым. Смит , айым Джонс , мисс Дейзи , мистер. Жашыл
матчтар:                ^^^^^ ^^^^^ ^^^^^ 
топ:                   11111 11111 11111    
( Чечим ) Келгиле, биз маалымат базасын тазалап жатабыз жана бизде пайыздарды көрсөткөн маалымат тилкеси бар дейли. Тилекке каршы, кээ бир адамдар сандарды [0,0, 1,0] диапазондо ондук сан катары жазса, башкалары [0,0%, 100,0%] диапазондо пайыздарды жазса, үчүнчүлөрү пайыздык маанилерди жазышкан, бирок түз пайыз белгисин унутуп коюшкан %. Терс көз карашты колдонуу менен (?!...), сиз пайыздар болушу керек, бирок сандары жок болгон маанилерди гана белгилей аласызбы %? Булар 1,00дон ашкан маанилер болушу керек, бирок артта калбоо керек %. (Эч бир сан ондук чекиттин алдында же андан кийин экиден ашык цифраны камтый алbyte.) <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 1111111111    
( Чечим ) <h2>19-кадам: Регулярдуу туюнтмалардагы шарттар</h2> RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  4-5-бөлүкБиз азыр көпчүлүк адамдар туруктуу сөз айкаштарын колдонбой турган чекке жеттик. Биз, кыязы, жөнөкөй регулярдуу туюнтмалар үчүн колдонуу учурларынын 95% камтыдык жана 19 жана 20-кадамдарда аткарылган нерселердин баары, адатта, awk же sed (же жалпы максаттагы программалоо тor) сыяктуу толук өзгөчөлөнгөн текстти башкаруу тor менен аткарылат. Туруктуу сөз айкашы чынында эмне кыла аларын билүү үчүн, келгиле, уланталы. Кадимки сөз айкаштары Turing complete болбосо да , кээ бир регулярдуу сөз айкаштары толук программалоо тorне абдан окшош функцияларды сунуштайт. Мындай өзгөчөлүктөрдүн бири - "шарт". 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 ай үчүн үзгүлтүксүз туюнтманы жазып, жарактуу даталарды гана жазсак болот, андан кийин алар жыл айы боюнча индекстелген топторго бириктирилет. Жогоруда "Feb" сандан мурун келсе, биринчи топтогу дал келүүлөрдү гана издей турган if-like структурасын колдонот (жана экинчиси үчүн). Бирок биз февраль үчүн гана атайын иштетүүнү колдонууну кааласакчы? "Эгер сандын алдында "Февр" болсо, муну кыл, болбосо бул башка нерсени кыл." Шарттуулар муну кантип жасайт:
үлгү: (?(?<=Февр )([1-2][0-9])|([1-2][0-9]|3[0-1])) 
сап: Иштеген даталары: 28- февраль , 29- февраль , 30-февраль, 30- март, 31- март  
Беттештер:                   ^^ ^^ ^^ ^^ 
топ:                      11 11 22 22    
( Мисал ) if-then-else түзүмү (?(If)then|else) сыяктуу көрүнөт, бул жерде (if) "алга карай" же "артка карап" менен алмаштырылат. Жогорудагы мисалда (эгерде) деп жазылган (?<=Feb). Биз 29дан ашкан даталарды дал келгенибизди көрө аласыз, бирок алар "Феврга" ылайык келбесе гана. Шарттуу туюнтмаларда lookbehinds колдонуу, дал келүүнүн алдында кандайдыр бир текст болушун кааласаңыз, пайдалуу. Позитивдүү кароо шарттары чаташтырышы мүмкүн, анткени шарттын өзү эч бир текстке дал келбейт. Демек, эгер сиз if шартынын качандыр бир мааниге ээ болушун кааласаңыз, анда ал төмөндөгүдөй алдыга карай салыштырылышы керек:
үлгү: (?(?=так)так|башка)wo 
сап: так башка так эки башка  
дал келет:            ^^^^^^^ ^^^^^^
( Мисалы ) Бул оң көз караштын шарттары пайдасыз дегенди билдирет. Сиз ошол тексттин алдыда экенин текшерип, андан кийин дал келген үлгүнү бересиз. Шарттуу туюнтма бизге бул жерде такыр жардам бербейт. Сиз ошондой эле жогорудагыны жөнөкөйраак регулярдуу сөз айкашы менен алмаштырсаңыз болот:
үлгү: (?:так|else)wo 
сап: exact else так эки башка  
дал келет:            ^^^^^^^ ^^^^^^
( Мисалы ) Демек, шарттуу туюнтмалардын эрежеси: сыноо, сынап көрүү жана кайра текшерүү. Болбосо, сиз ачык деп ойлогон чечимдер эң кызыктуу жана күтүлбөгөн жолдор менен ишке ашпай калат :) <h3>Бизди акыркы, 20-кадамдан бөлүп турган тапшырмалардын акыркы блогуна келдик:</h3> Регулярдуу сөз айкашын жазыңыз. кийинки сөз баш тамга менен башталарын текшерүү үчүн терс көрүнүш шарттуу туюнтманы колдонот. Андай болсо, бир гана баш тамганы, анан кичине тамгаларды кармаңыз. Эгер андай болбосо, кандайдыр бир сөздүн символун кармаңыз.
үлгү:
string:   Jones Smith 9sfjn Hobbes 23r4tgr9h CSV Csv vVv 
matches: ^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^ 
топ:    22222 22222 11111 222222 111111111 222 111    
( Чечимowns ) Тексттин алдында текст болбосо , ал эми тексттин алдында текст болгондо гана clкамтыган артына терс карап шарттуу туюнтманы жазыңыз . (Бир аз ойдон чыгарылган мисал, бирок эмне кыла аласыз ...) oudscl
үлгү:
сап: Бул клоундардын кээ бир клоуддары бар . уд.
дал келет:              ^^^^ ^^^^   
( Чечим ) <h2>20-кадам: Рекурсия жана андан аркы изилдөө </ h2> RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  4-6-бөлүкЧындыгында, кандайдыр бир темага 20 кадамдык кириш сөзгө сыгылып кете турган көп нерсе бар жана туруктуу сөз айкаштары да четте калbyte. Интернеттен тапса болот туруктуу сөз айкаштары үчүн көптөгөн ар кандай ишке ашыруу жана стандарттар бар . Көбүрөөк билгиңиз келсе, мен сизге Regularexpressions.info сонун сайтын карап чыгууну сунуштайм , бул фантастикалык шилтеме жана мен, албетте, ал жерден туруктуу сөз айкаштары жөнүндө көп нерсени үйрөндүм. Мен аны, ошондой эле regex101.com сайтын сиздин чыгармаларыңызды сыноо жана жарыялоо үчүн сунуштайм. Бул акыркы кадамда мен сизге туруктуу сөз айкаштары, тактап айтканда рекурсивдүү туюнтмаларды кантип жазуу керектиги жөнүндө бир аз көбүрөөк бorм берем. Жөнөкөй рекурсиялар абдан жөнөкөй, бирок келгиле, бул туруктуу сөз айкашынын контекстинде эмнени билдирерин ойлонуп көрөлү. Регулярдуу туюнтмадагы жөнөкөй рекурсиянын синтаксиси(?R)? мындайча жазылган: . Бирок, албетте, бул синтаксис сөздүн өзүндө пайда болушу керек. Биз жасай турган нерсе - сөз айкашын өз ичине, каалагандай санда. Мисалы:
үлгү: (эй(?R)?oh) 
сап:   эй эй эй эй эй heyheyohoh эй эй эй эй эй эй эй эй йо  
йо й : ^^^^^ ^^^^^^^^^^^^^^^^^^^^ 
топ:    11111 1111111111 1111111111    
( Мисал ) Уюшкан туюнтма милдеттүү эмес болгондуктан ( (?R)артынан ?), эң жөнөкөй дал келүү - рекурсияны толугу менен этибарга алуу. Ошентип, hey, анан ohдал келет ( heyoh). (?R)Мындан татаалыраак туюнтмага дал келүү үчүн, биз ырааттуулукту киргизген туюнтмадагы чекитте дал келген ички сапты табышыбыз керек . Башкача айтканда, биз heyheyohoh же heyheyohohoh, ж.б.у.с. Бул уяланган туюнтмалардын эң сонун жактарынын бири, арткы шилтемелерден жана аталган басып алуу топторунан айырмаланып, алар сизди мурда дал келген так текст менен чектебейт. Мисалы:
үлгү: ([Hh][Ee][Yy](?R)?oh) 
сап:   heyoh heyyoh hEyHeYohoh эй о хейхей hEyHeYHEyohohoh  
дал келет: ^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^ 
топ:    11111 1111111111 111111111111111    
( Мисалы ) Сиз регулярдуу туюнтма кыймылдаткычы сиздин регулярдуу сөз айкашыңызды бир нече жолу өз алдынча көчүрүп жана чаптап жатканын элестете аласыз. Албетте, бул кээде сиз күткөн нерсени кылбай калышы мүмкүн дегенди билдирет:
үлгү: ((?:\(\*)[^*)]*(?R)?(?:\*\))) 
сап: (* комментарий (* уяча *) эмес *)
матчтар:            ^^^^^^^^^^^^ 
группа:               111111111111    
( Мисал ) Эмне үчүн бул регекс сырткы комментарийди эмес, уяланган комментарийди гана басып алганын айта аласызбы? Бир нерсе анык: татаал туруктуу сөз айкаштарын жазып жатканда ар дайым алардын сиз ойлогондой иштешин текшерип көрүңүз. Туруктуу сөз айкаштарынын жолдорунда бул жогорку ылдамдыктагы митинг аяктады. Бул сапар сизге жакты деп ишенем. Акыр-аягы, мен бул жерден, башында убада кылгандай, материалды тереңирээк изилдөө үчүн бир нече пайдалуу шилтемелерди калтырам:
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION