JavaRush /Java блогу /Random-KY /RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска к...
Artur
Деңгээл
Tallinn

RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам. 1-бөлүк

Группада жарыяланган
Бул макаланын түп нускасы бул жерде . Балким, өтө көп теория деген нерсе жок, мен макаланын аягында regex боюнча кеңири материалдарга бир нече шилтемелерди берем. Бирок мага кадимки сөз айкаштары сыяктуу темага тереңдеп киришүү, жолдо кичинекей тапшырмаларды аткарып, бorмди тыгып эле тим болбостон, дароо чыңдоого мүмкүнчүлүк болсо алда канча кызыктуураак болуп көрүндү. RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  1-1-бөлүкКелиңиз баштайлы. Адатта программалоодо кадимки сөз айкаштарын («RegEx» же жөн эле «regex») колдонууга каршы болгондор Джейми Завинскиге таандык төмөнкү цитатаны келтиришет: «Кээ бир адамдар көйгөйгө туш болгондо, «Мен билем, мен туруктуу сөз айкаштарын колдоном» деп ойлошот. .'" Эми алардын эки көйгөйү бар". Чынында, туруктуу сөз айкаштарын колдонуу азырынча жакшы же жаман идея эмес. Ал эми мунун өзү эле көйгөйлөрдү кошпойт жана алардын бирин да чечпейт. Бул жөн гана курал. Жана аны кантип колдонсоңуз (туура же туура эмес) кандай натыйжаларды көрөрүңүздү аныктайт. Эгер сиз, мисалы, HTML анализдөөчүсүн түзүү үчүн регексти колдонууга аракет кылсаңыз, анда сиз ооруну сезесиз . Бирок, мисалы, кээ бир саптардан убакыт белгилерин чыгарып алгыңыз келсе, анда сизде жакшы болот. Туруктуу сөз айкаштарын өздөштүрүүңүздү жеңилдетүү үчүн, мен бул сабакты чогулттум, ал сизге жыйырма кыска кадам менен нөлдөн баштап туруктуу сөз айкаштарын өздөштүрүүгө жардам берет. Бул окуу куралы негизинен туруктуу сөз айкаштарынын негизги түшүнүктөрүнө көңүл бурат жана зарыл болгондо гана өркүндөтүлгөн темаларды камтыйт.

1-кадам: Эмне үчүн туруктуу сөз айкаштарын колдонушат

RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  1-2-бөлүкРегулярдуу туюнтмалар көрсөтүлгөн үлгүлөрдү (үлгүлөрдү) колдонуу менен тексттеги дал келүүлөрдү издөө үчүн колдонулат. Регексти колдонуу менен биз тексттен сөздөрдү , ошондой эле жеке литералдык жана мета символдорду жана алардын белгилүү бир критерийлерге жооп берген ырааттуулугун оңой жана жөнөкөй чыгара алабыз. Википедия булар жөнүндө бизге мындай дейт : Регулярдуу туюнтмалар – метасимволдорду (жапайы символдор) колдонууга негизделген тексттеги ички саптарды издөө жана башкаруу үчүн расмий тил. Издөө үчүн символдордон жана метасимволдордон турган жана издөө эрежесин аныктаган үлгү сап (англисче үлгү, орусча көбүнчө “шаблон”, “маска” деп аталат) колдонулат. Текстти манипуляциялоо үчүн алмаштыруу сап кошумча көрсөтүлөт, ал ошондой эле атайын белгилерди камтышы мүмкүн. dogҮлгү бул сүйлөмдөгү сөз сыяктуу жөнөкөй болушу мүмкүн :
Тез күрөң түлкү жалкоо иттин үстүнөн секирет.
Бул кадимки сөз айкашы төмөнкүдөй көрүнөт:
ит
...Оңой, туурабы? Үлгү ошондой эле тамганы камтыган ар кандай сөз болушу мүмкүн o. Мындай үлгүнү табуу үчүн кадимки сөз айкашы мындай көрүнүшү мүмкүн:
\w * о\w *
( Сиз бул туруктуу сөз айкашын бул жерден сынап көрүңүз .) "Таш келген" талаптар татаалдашкан сайын, туруктуу сөз айкашынын да татаалдашканын байкайсыз. Символдордун топторун көрсөтүү жана кайталануучу үлгүлөрдү дал келтирүү үчүн белгилердин кошумча формалары бар, аларды мен төмөндө түшүндүрөм. Бирок, биз кандайдыр бир тексттеги үлгүгө дал келээрибиз менен, аны менен эмне кылсак болот? Заманбап регулярдуу туюнтма кыймылдаткычтары камтылган тексттен символдорду же символдордун ырааттуулугун (под саптарды) чыгарууга, же аларды алып салууга же башка текст менен алмаштырууга мүмкүндүк берет. Жалпысынан, туруктуу сөз айкаштары текстти талдоо жана башкаруу үчүн колдонулат. Биз, мисалы, IP даректерине окшош субсаптарды чыгарып, анан аларды текшерүүгө аракет кылсак болот. Же аттарды жана электрондук почта даректерин чыгарып, аларды маалымат базасында сактай алабыз. Же электрондук каттардан купуя маалыматты (мисалы, паспорттун номерлери же телефон номерлери) табуу үчүн кадимки сөз айкаштарын колдонуңуз жана колдонуучуга алар өздөрүн тобокелге салып жаткандыгы жөнүндө эскертиңиз. Regex чындап эле үйрөнүү оңой, бирок өздөштүрүү кыйын болгон ар тараптуу курал: "Музыканы жакшы ойноо менен музыканы жаратуунун ортосунда кандай айырма бар болсо, кадимки сөз айкаштарын билүү менен аларды түшүнүүнүн ортосунда да айырма бар". - Jeffrey E. F. Friedl, Регулярдуу туюнтмаларды өздөштүрүү

2-кадам: Чарчы кашаалар[]

Түшүнүүгө оңой болгон эң жөнөкөй регулярдуу сөз айкаштары - бул кадимки туюнтма үлгүсү менен максаттуу саптын ортосундагы символ боюнча дал келүүнү издегендер. Мисалы, мышык табууга аракет кылалы: RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  1-3-бөлүк
үлгү: мышык
сап: Мышык машинанын астына чуркаганда кесorп кеткен.
дал келет:      ^^^
( Бул иш жүзүндө кандай иштейт - бул жерден караңыз ) NB! Бардык чечимдер бул жерде мүмкүн болгон чечимдер катары гана берилген. Регулярдуу туюнтмаларда, жалпы эле программалоодогудай эле, бир эле маселелерди ар кандай жолдор менен чечүүгө болот. Бирок, катаал белги-белги салыштыруу тышкары, биз чарчы кашааларды колдонуу менен альтернативдүү дал келүүлөрдү да көрсөтө алабыз:
үлгү: ca[rt]
сап: Мышык машинанын астына чуркаганда кесorп кеткен.
дал келет:      ^^^ ^^^
( Бул кантип иштейт ) Ачуу жана жабуу төрт бурчтуу кашаалар кадимки туюнтма кыймылдаткычына ал көрсөтүлгөн символдордун бирине дал келиши керектигин, бирок бир гана символго дал келиши керектигин айтат. Жогорудагы туруктуу сөз айкашы, мисалы, cartбүт сөздү таба алbyte, бирок анын бир бөлүгүн гана табат:
үлгү: ca[rt]
сап: Мышык арабанын астынан чуркап баратканда кесилди.
дал келет:      ^^^ ^^^
( Бул кантип иштейт ) Чарчы кашааларды колдонгондо, кадимки туюнтма кыймылдаткычына кашаанын ичиндеги символдордун бирине гана дал келүүсүн айтасыз. Кыймылдаткыч каарманды табат c, андан кийин каарман a, бирок кийинки белги же болбосо r, tанда бул толук дал келбейт. Эгерде ал ca, анан же r, же болсо t, токтойт. Ал көбүрөөк символдорду дал келтирүүгө аракет кылbyte, анткени төрт бурчтуу кашаалар камтылган символдордун бирөөсү гана дал келиши керек экенин көрсөтүп турат. Тапканда кийинки сөздөн caтабат жана ырааттуулукка дал келген нерсени таап алгандыктан токтойт . rcartcar

Тренинг максаттары:

Жергorктүү диалектиде которулбай турган сөздөрдүн бул үзүндүсүндөгү hadбардык 10 үлгүгө дал келген туруктуу сөз айкашын жазыңыз :Had
үлгү:
сап: Джим, Билл "бар болгон" жерде , "бар болгон" . "Болду" дегени туура болчу.
дал келет:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( Мүмкүн болгон чечимди бул жерден караңыз ) Төмөнкү сүйлөмдөгү жаныбарлардын аттары жөнүндө эмне айтууга болот?
үлгү:
сап: жарганат, мышык жана келемиш барга кирип келишти...
дал келет:    ^^^ ^^^ ^^^
( Мүмкүн болгон чечим ) Же андан да жөнөкөй: сөздөрдү табыңыз barже bat:
үлгү:
сап: жарганат, мышык жана келемиш барга кирип келишти...
дал келет:    ^^^ ^^^
( Мүмкүн болгон чечим ) Эми биз аздыр-көптүр татаал туруктуу сөз айкаштарын кантип жазууну үйрөндүк жана 2-кадамдабыз! уланталы!

3-кадам: Escape Sequences

RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  1-4-бөлүкМурунку кадамда биз чарчы кашаалар жөнүндө []жана алар regex кыймылдаткычын колдонуу менен альтернативдик дал келүүлөрдү табууга кандайча жардам берерин билдик. Бирок биз ачык жана жабык төрт бурчтуу кашаа түрүндө дал келүүнү кааласакчы []? Биз сөздүн символдор боюнча дал келүүсүн тапкыбыз келгенде cat, regex кыймылдаткычына символдордун ушул ырааттуулугун бердик ( cat). []Ушундай эле жол менен төрт бурчтуу кашааларды табууга аракет кылалы :
үлгү: [] 
сап: Сиз regex менен [] дал келе албайсыз! Буга өкүнөсүң!
дал келет: 
( Келгиле, эмне болгонун карап көрөлү ) Бирок, бир нерсе иштебей калды... Себеби, төрт бурчтуу кашаа символдору адатта башка нерсени көрсөтүү үчүн колдонулуучу атайын регекс кыймылдаткычынын символдору катары иштешет жана аларга дал келүү үчүн сөзмө-сөз үлгү эмес. 2-кадамдан эстегендей, алар regex кыймылдаткычы алардын ортосундагы символдордун каалаганына дал келиши үчүн альтернативалуу дал келүүлөрдү табуу үчүн колдонулат. Эгер алардын ортосуна эч кандай белги койбосоңуз, анда ката пайда болушу мүмкүн. Бул өзгөчө белгилерге дал келүү үчүн, биз алардын алдына тескери сызык белгиси менен алардан качышыбыз керек \. Артка сызык (же тескери сызык) регекс кыймылдаткычына кийинки символду мета символ катары колдонбой, түзмө-түз издөөнү айткан дагы бир өзгөчө белги. Regex кыймылдаткычы символдорду гана издейт [жана ]эгер алардын экөөнүн тең алдында тескери сызык бар болсо:
үлгү: \[\]
сап: Сиз regex менен [] дал келе албайсыз! Буга өкүнөсүң!
дал келет:                  ^^ 
( Келгиле, бул жолу эмне болгонун карап көрөлү ) Макул, эгер биз тескери сызыкты табууну кааласакчы? Жооп жөнөкөй. Арткы сызык да өзгөчө белги болгондуктан \, андан да качуу керек. Кантип? Backslash!
үлгү: \\
сап: C:\Users\Tanja\Pictures\Dogs
дал келет:    ^ ^ ^ ^
( Практикадагы ошол эле мисал ) Атайын символдордун алдында гана тескери сызык болушу керек. Бардык башка белгилер демейки боюнча түзмө-түз чечмеленет. Мисалы, кадимки сөз айкашы кичине тамгаларга tгана дал келет :t
үлгү: т
сап: tttt
дал келет: ^ ^ ^ ^
( Мисал ) Бирок бул ырааттуулук \tбашкача иштейт. Бул өтмөк белгисин издөө үчүн шаблон:
үлгү: \t
сап: tttt
дал келет:   ^ ^ ^
( Мисал ) Кээ бир жалпы качуу ырааттуулугуна \n(UNIX стorндеги сызыктар) жана \r(Windows стorндеги линия үзгүлтүктөрүндө колдонулат \r\n) кирет. \r"каретканы кайтаруу" символу жана \n"сызык берүү" символу, экөө тең ASCII стандарты менен бирге телетайптар кеңири колдонулуп турганда аныкталган. Башка жалпы качуу ырааттуулугу бул окуу куралында кийинчерээк каралат.

Ал ортодо, келгиле, бир нече жөнөкөй табышмактар ​​менен материалды бекемдейли:

Табуу үчүн туруктуу сөз айкашын жазып көрүңүз... туруктуу сөз айкашын ;) Натыйжа мындай болушу керек:
үлгү:
string: ...бул regex ` \[\] ` регекс менен дал келеби?
дал келет:                       ^^^^	
( Чечим ) Сиз башкара алдыңызбы? Мыкты жасалды! Эми төмөнкүдөй качуу ырааттуулугун издөө үчүн регекс түзүп көрүңүз:
үлгү:
сап: ` \r `, ` \t ` жана ` \n ` – бардыгы регекстен качуу ырааттуулугу.
дал келет:   ^^ ^^ ^^
( Чечим )

4-кадам: чекит менен "кандай болбосун" белгини изде.

RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  1-5-бөлүкМурунку кадамда көргөн качуу ырааттуулугуна дал келген чечимдерди жазып жатканда, сиз: "Мен тескери сызык белгисин жана андан кийинки каалаган башка символду дал келтире аламбы?"... Албетте, мүмкүн! Ар кандай белгиге (дээрлик) дал келүү үчүн колдонулган дагы бир өзгөчө белги бар - чекит (точка) символу. Ал эмне кылат:
үлгү: .
сап: Кечиресиз, Дэйв. Мен муну кыла албайм деп корком.
Матчтар: ^.....	
( Мисалы ) Эгер сиз качуу ырааттуулугуна окшош үлгүлөрдү гана дал келтиргиңиз келсе, төмөнкүдөй нерсени кылсаңыз болот:
үлгү: \\. 
сап: Салам Уолмарт менин неберем, ал жерде анын аты " \n \r \t ".
дал келет:                                              ^^ ^^ ^^	
( Мисалы ) Жана, бардык атайын символдор сыяктуу эле, эгер сиз литералга дал келүүнү кааласаңыз ., анда анын алдына символ менен киришиңиз керек \:
үлгү: \. 
сап: Согуш - Тынчтык . Эркиндик бул кулчулук . Бorмсиздик - бул Күч . 
дал келет:             ^ ^ ^
( Мисалы )

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. Түстөрдү белгилөө үчүн колдонулганда, он алтылык codeдор эң көп дегенде үч символду камтышы мүмкүн. Төмөнкү тизмеден жарактуу он алтылык codeдорду табуу үчүн кадимки туюнтманы түзүңүз:
үлгү:
сап: 1H8 4E2 8FF 0P1 T8B 776 42B G12
дал келет:      ^^^ ^^^ ^^^ ^^^	
( Чечимy ) Символ диапазондорун колдонуп, төмөндөгү сүйлөмдө кичинекей үнсүздөрдү гана (үндүүлөрдү эмес, анын ичинде) тандай турган туруктуу сөз айкашын түзүңүз :
үлгү:
сап : Т h е в а л ы н ы м а л а л ы , т о т а л ы т а л ы . _ 
Матчи:   ^ ^^^^ ^^ ^^ ^^ ^^ ^^^ ^^ ^^ ^^	
( Чечим )

6-кадам: "эмес", каретка, циркумфлекс, каретка... символу^

RegEx: туруктуу сөз айкаштарын өздөштүрүү үчүн 20 кыска кадам.  1-7-бөлүкЧынында эле, бул символдун 9000ден ашуун аталышы бар :) Бирок, жөнөкөйлүк үчүн, балким, биз "жок" дегенге басым жасайбыз. Акыркы маселе боюнча менин чечимим бир аз узун. "Үндүү тыбыштардан башка бүт алфавитти ал" деп айтуу үчүн 17 белги керек болгон. Албетте, муну жасоонун оңой жолу бар. "Жок" белгиси үлгүдө көрсөтүлгөнгө дал келбеши^ керек болгон символдорду жана символдордун диапазондорун көрсөтүүгө мүмкүндүк берет . Жогорудагы акыркы маселенин жөнөкөй чечими - үндүүлөрдү билдирбеген белгилерди табуу:
улгу : [ ^ aeiou] сап 
:   Т о т а л ы т а л ы , т а т а л ы т а л ы . 
дал келет: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 	
( Мисал^ ) Чарчы кашаанын ичиндеги эң сол символ катары "эмес" белгиси []кадимки туюнтма кыймылдаткычына төрт бурчтуу кашаанын ичинде жок бир (кандай болбосун) белгиге дал келүүсүн билдирет. Бул жогорудагы туруктуу сөз айкашы сүйлөмдүн башындагы бардык боштуктарга, чекиттерге ., үтүрлөргө ,жана баш тамгаларга дал келет дегенди билдирет. TАларды жокко чыгаруу үчүн, биз аларды төрт бурчтуу кашаанын ичине да киргизсек болот:
үлгү: [^aeiou .,T] сап  
: Т h e w a lls i n th e m a ll a r e t o t ll , т о т а л ы т а л ы . 
Матчи:   ^ ^^^^ ^^ ^^ ^^ ^^ ^^^ ^^ ^^ ^^	
( Мисалы ) көңүл буруңуздарБул учурда, биз бурчтуу кашааларды колдонбостон издегендей, тескери сызык менен чекиттен качуунун кереги жок. Чарчы кашаадагы көптөгөн атайын символдор түзмө-түз каралат, анын ичинде ачык [- бирок жабылуучу эмес - ]кашаа белгиси (эмне үчүн экенин биле аласызбы?). Керти сызык белгиси \да түз мааниде чечмеленбейт. Эгер сиз бурчтуу кашааларды колдонуп түзмө-түз тескери сызыкты дал келүүнү кааласаңыз \, анда анын алдына төмөнкү тескери сызык менен кутулушуңуз керек \\. Бул иш-аракет боштуктун символдору да дал келүү үчүн чарчы кашаанын ичине жайгаштырылышы үчүн иштелип чыккан:
үлгү: [\t]
сап: tttt
дал келет:   ^ ^ ^
( Мисалы ) "Жок" белгиси ^диапазон менен да колдонулушу мүмкүн. aЭгерде мен , b, c, жана x, каармандарын гана тартууну кааласам , мен мындай кыла алмакмын: yz
үлгү: [abcxyz] 
сап:   abc defghijklmnopqrstuvw xyz 
дал келет: ^^^ ^^^
( Мисал ) ...же, мен жана ортосунда болбогон кандайдыр бир символду тапкым келет деп белгилей алам : dw
үлгү: [^dw] 
сап:   abc defghijklmnopqrstuvw xyz 
дал келет: ^^^ ^^^
( Мисалы ) Бирок,абайла"жок" менен ^. Ойлонуу оңой "жакшы, мен көрсөттүм , андыктан кийин кичине тамга же бир нерсени [^ b-f]алышым керек . Андай эмес. Бул регекс ошол диапазондо эмес, тамгаларды, сандарды, тыныш белгилерин жана боштуктарды камтыган каалаган символго дал келет. af
үлгү: [^dw] 
сап:   abc defg h . i , j - klmnopqrstuvw xyz 
дал келет: ^^^ ^ ^ ^ ^ ^^^
( Мисалы )

Деңгээлдөө милдеттери:

^Төмөнкү менен бүтпөгөн сөздөрдүн бардыгына дал келүү үчүн чарчы кашаанын ичиндеги "жок" белгисин колдонуңуз y:
үлгү:
сап: day dog'hog saman bog bay ray rub 
matches:      ^^^ ^^^ ^^^ ^^^	
( Чечим^ ) 1977 жана 1982-жылдардын (кошкондо) ортосундагы бардык жылдарды табуу үчүн диапазонду жана "жок" белгисин колдонуп туруктуу сөз айкашын жазыңыз :
үлгү:
сап: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
дал келет:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
( Чечим ) "эмес" белги белгиси болбогон бардык символдорду табуу үчүн туруктуу сөз айкашын жазыңыз ^:
үлгү:
сап:   abc1 ^ 23*() 
дал келет: ^^^^ ^^^^^	
( Чечим )

7-кадам: Каармандардын класстары

Символ класстары символдор диапазонунан да жөнөкөй. Ар кандай кадимки экспресс кыймылдаткычтарынын ар кандай класстары бар, ошондуктан мен бул жерде негизгилерин гана айтам. (Сиз регекстин кайсы versionсын колдонуп жатканыңызды текшериңиз, анткени алар көбүрөөк болушу мүмкүн - же алар бул жерде көрсөтүлгөндөрдөн башкача болушу мүмкүн.) Символ класстары дээрлик диапазондор сыяктуу иштейт, бирок "баштоо" жана "аяктоо" маанилерин көрсөтө албайсыз:
Класс символдор
\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 ` боштук символдору , ` \. `, ` \\ ` жана ` \[ ` эмес .
дал келет:   ^^ ^^ ^^ ^^	
( Мисалы )

Ийгorк үчүн 2 тапшырма:

Сиз жана мен билгендей, Java тorнде идентификатор (өзгөрмөнүн аты, класс, функция ж.б.) a- zA- тамгасы менен гана башталышы мүмкүн Z, доллар белгиси $же астын сызуу _. ( Албетте, астын сызуу стor начар, бирок компилятор аны өткөрүп жиберет, котормочунун эскертүүсү ). Калган каармандар "сөз" тамгалары болушу керек \w. Бир же бир нече тамга класстарын колдонуп, төмөнкү үч символдук тизмектердин арасынан жарактуу Java идентификаторлорун издөө үчүн кадимки туюнтманы түзүңүз:
үлгү:
сап:   __e $12 .x2 foo Бар 3мм
дал келет: ^^^ ^^^ ^^^ ^^^	
( Чечим ) АКШнын социалдык камсыздандыруу номерлери (SSN) XXX-XX-XXXX форматындагы 9 орундуу сандар, мында ар бир 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