JavaRush /Java блогы /Random-KK /RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам. 1 ...
Artur
Деңгей
Tallinn

RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам. 1 бөлім

Топта жарияланған
Бұл мақаланың түпнұсқасы осында . Мүмкін, тым көп теория деген нәрсе жоқ, мен мақаланың соңында regex туралы толығырақ материалға бірнеше сілтемелер беремін. Бірақ маған тұрақты сөз тіркестері сияқты тақырыпты тереңдете бастағанда, шағын тапсырмаларды орындау арқылы тек қана қысып қана қоймай, сонымен қатар білімді бірден бекіту мүмкіндігі болса, әлдеқайда қызықтырақ болатын сияқты көрінді. RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам.  1 - 1 бөлімБастайық. Әдетте бағдарламалауда тұрақты өрнектерді («RegEx» немесе жай «regex») қолдануға қарсылар Джейми Завинскиге қатысты келесі дәйексөзді келтіреді: «Кейбір адамдар мәселеге тап болғанда, «Мен білемін, мен тұрақты өрнектерді қолданамын» деп ойлайды. .'" Енді оларда екі мәселе бар". Шын мәнінде, тұрақты тіркестерді пайдалану әлі жақсы немесе жаман идея емес. Және бұл өз алдына проблемаларды қоспайды және олардың ешқайсысын шешпейді. Бұл жай ғана құрал. Оны қалай пайдаланатыныңыз (дұрыс немесе бұрыс) қандай нәтиже көретініңізді анықтайды. Егер сіз HTML талдаушысын жасау үшін, мысалы, regex-ті қолдануға тырыссаңыз, сізде ауырсыну пайда болуы мүмкін . Бірақ егер сіз жай ғана, мысалы, кейбір жолдардан уақыт белгілерін шығарып алғыңыз келсе, сізде жақсы болуы мүмкін. Тұрақты тіркестерді меңгеруді жеңілдету үшін мен бұл сабақты жинадым, ол сізге жиырма қысқа қадаммен нөлден бастап тұрақты тіркестерді меңгеруге көмектеседі. Бұл оқулық негізінен тұрақты тіркестердің негізгі ұғымдарына назар аударады және қажет болған жағдайда ғана кеңейтілген тақырыптарды ашады.

1-қадам: Неліктен тұрақты тіркестерді қолдану керек

RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам.  1-2 бөлімТұрақты өрнектер көрсетілген үлгілер (үлгілер) арқылы мәтіндегі сәйкестіктерді іздеу үшін қолданылады. Регексті пайдалана отырып, біз мәтіннен сөздерді , сондай-ақ белгілі бір критерийлерге сәйкес келетін жеке әріптік және мета таңбаларды және олардың ретін оңай және оңай шығара аламыз . Википедия бізге олар туралы не айтады : Тұрақты өрнектер метатаңбаларды (қойылмалы таңбалар) пайдалануға негізделген мәтіндегі ішкі жолдарды іздеуге және өңдеуге арналған ресми тіл болып табылады. Іздеу үшін таңбалар мен метасимволдардан тұратын және іздеу ережесін анықтайтын үлгі жолы (ағылшынша үлгі, орыс тілінде жиі «үлгі», «маска» деп аталады) пайдаланылады. Мәтінді өңдеу үшін ауыстыру жолы қосымша көрсетіледі, оның құрамында арнайы таңбалар да болуы мүмкін. dogҮлгі осы сөйлемдегі сөз сияқты қарапайым болуы мүмкін :
Жылдам қоңыр түлкі жалқау иттің үстінен секіреді.
Бұл тұрақты өрнек келесідей көрінеді:
ит
...Оңай, солай емес пе? Үлгі де әріпті қамтитын кез келген сөз болуы мүмкін o. Мұндай үлгіні табуға арналған тұрақты өрнек келесідей болуы мүмкін:
\Апыр - ай *
( Осы тұрақты өрнекті осы жерден қолданып көруге болады .) "Сәйкестік" талаптары күрделене түскен сайын тұрақты өрнектің де күрделене түсетінін байқайсыз. Таңбалар топтарын көрсету және қайталанатын үлгілерді сәйкестендіру үшін белгілеудің қосымша формалары бар, мен оларды төменде түсіндіремін. Бірақ қандай да бір мәтіндегі үлгіге сәйкестікті тапқан бойда, онымен не істей аламыз? Қазіргі тұрақты өрнек механизмдері қамтылған мәтіннен таңбаларды немесе таңбалар тізбегін (ішкі жолдарды) шығаруға немесе оларды жоюға немесе басқа мәтінмен ауыстыруға мүмкіндік береді. Жалпы, тұрақты тіркестер мәтінді талдау және өңдеу үшін қолданылады. Біз, мысалы, IP мекенжайларына ұқсайтын ішкі жолдарды шығарып, оларды тексеруге тырысамыз. Немесе атаулар мен электрондық пошта мекенжайларын шығарып, оларды дерекқорда сақтай аламыз. Немесе электрондық хаттарда құпия ақпаратты (мысалы, төлқұжат нөмірлері немесе телефон нөмірлері) табу үшін тұрақты өрнектерді пайдаланыңыз және пайдаланушыға өздерін қауіп төндіруі мүмкін екенін ескертіңіз. Regex шын мәнінде үйренуге оңай, бірақ меңгеру қиын жан-жақты құрал: «Музыкалық шығарманы жақсы ойнау мен музыка жасаудың арасында қандай айырмашылық бар болса, тұрақты тіркестерді білу мен оларды түсіну арасында да айырмашылық бар». - Джеффри Э.Ф. Фридл, тұрақты өрнектерді меңгеру

2-қадам: Шаршы жақшалар[]

Түсінуге оңай қарапайым тұрақты өрнектер қарапайым өрнек үлгісі мен мақсатты жол арасындағы таңба бойынша сәйкестікті іздейтіндер. Мысалы, мысық табуға тырысайық: RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам.  1 - 3 бөлім
үлгісі: мысық
жіп: Мысық көліктің астына жүгірген кезде кесілген.
сәйкес келеді:      ^^^
( Бұл іс жүзінде қалай жұмыс істейді - мына жерден қараңыз ) NB! Мұнда барлық шешімдер тек ықтимал шешімдер ретінде берілген. Тұрақты өрнектерде, жалпы бағдарламалаудағы сияқты, бірдей есептерді әртүрлі тәсілдермен шешуге болады. Дегенмен, қатаң таңбалар бойынша салыстырудан басқа, біз төртбұрышты жақшаларды пайдаланып балама сәйкестіктерді де көрсете аламыз:
үлгі: ca[rt]
жіп: Мысық көліктің астына жүгірген кезде кесілген.
сәйкес келеді:      ^^^ ^^^
( Бұл қалай жұмыс істейді ) Төртбұрышты жақшаларды ашу және жабу тұрақты өрнек механизміне ол көрсетілген таңбалардың кез келгеніне сәйкес келуі керек екенін, бірақ тек біреуін айтады. Жоғарыдағы тұрақты тіркес, мысалы, cartбүкіл сөзді таба алмайды, бірақ оның бір бөлігін ғана табады:
үлгі: ca[rt]
жіп: Мысық арбаның астынан жүгіргенде кесілді.
сәйкес келеді:      ^^^ ^^^
( Бұл қалай жұмыс істейді ) Шаршы жақшаларды пайдаланған кезде, сіз тұрақты өрнек механизміне жақшалардағы таңбалардың біреуіне ғана сәйкес келуін айтасыз. Қозғалтқыш таңбаны c, содан кейін таңбаны табады a, бірақ келесі таңба rнемесе болмаса t, бұл толық сәйкестік емес. Егер ол ca, содан кейін не r, немесе t, ол тоқтайды. Ол көбірек таңбаларды сәйкестендіруге тырыспайды, себебі төртбұрышты жақшалар қамтылған таңбалардың тек біреуін сәйкестендіру қажет екенін көрсетеді. Тапқан кезде келесі сөзден caтабады және тоқтайды, өйткені ол реттілікке сәйкестік тауып қойған . rcartcar

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

Жергілікті диалектідегі аударылмайтын сөз тіркестерінің осы үзіндісіндегі hadбарлық 10 үлгіге сәйкес келетін тұрақты тіркесті жазыңыз :Had
үлгі:
string: Джим, Билл "болды" , "болды" . «Болды» деген дұрыс болды.
сәйкес келеді:                  ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^ ^^^
( Мүмкін шешімін осы жерден қараңыз ) Келесі сөйлемдегі барлық жануарлар атаулары туралы не деуге болады?
үлгі:
жіп: жарғанат, мысық және егеуқұйрық барға кірді ...
сәйкес келеді:    ^^^ ^^^ ^^^
( Ықтимал шешім ) Немесе одан да қарапайым: сөздерді табыңыз barнемесе bat:
үлгі:
жіп: жарғанат, мысық және егеуқұйрық барға кірді ...
сәйкес келеді:    ^^^ ^^^
( Ықтимал шешім ) Енді біз азды-көпті күрделі тұрақты тіркестерді жазуды үйрендік және біз тек 2-қадамдамыз! Жалғастырайық!

3-қадам: Қашу реті

RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам.  1-4 бөлімАлдыңғы қадамда біз төртбұрышты жақшалар туралы []және олардың regex қозғалтқышы арқылы балама сәйкестіктерді табуға қалай көмектесетінін білдік. Бірақ егер біз ашық және жабық төртбұрышты жақшалар түріндегі сәйкестіктерді тапқымыз келсе ше []? Біз сөздің таңба бойынша сәйкестігін тапқымыз келгенде cat, regex механизмін осы таңбалар тізбегімен қамтамасыз еттік ( cat). []Шаршы жақшаларды дәл осылай табуға тырысайық :
үлгі: [] 
жол: regex көмегімен [] сәйкестендіре алмайсыз! Сіз бұған өкінесіз!
сәйкес келеді: 
( Не болғанын көрейік ) Дегенмен, бірдеңе жұмыс істемеді... Себебі төртбұрышты жақша таңбалары әдетте басқа нәрсені көрсету үшін пайдаланылатын арнайы regex қозғалтқыш таңбалары ретінде әрекет етеді және оларға сәйкес келетін әріптік үлгі емес. 2-қадамнан есте қалғандай, олар балама сәйкестіктерді табу үшін пайдаланылады, осылайша regex қозғалтқышы олардың арасындағы кез келген таңбаға сәйкес келеді. Олардың арасына ешқандай таңба қоймасаңыз, ол қате тудыруы мүмкін. Осы арнайы таңбаларды сәйкестендіру үшін олардың алдына кері қиғаш сызық таңбасын қою арқылы олардан құтылуымыз керек \. Кері қиғаш сызық (немесе кері қиғаш сызық) regex қозғалтқышына келесі таңбаны метатаңба ретінде пайдаланбай, тура мағынада іздеуді айтатын тағы бір арнайы таңба. Regex қозғалтқышы тек таңбаларды іздейді [және ]олардың екеуінің алдында кері қиғаш сызық болса:
үлгі: \[\]
жол: regex көмегімен [] сәйкестендіре алмайсыз! Сіз бұған өкінесіз!
сәйкес келеді:                  ^^ 
( Осы жолы не болғанын көрейік ) Жарайды, егер кері қиғаш сызықтың өзін тапқымыз келсе ше? Жауап қарапайым. Кері қиғаш сызық арнайы таңба болғандықтан \, оны да айналып өту керек. Қалай? Кері қиғаш сызық!
үлгі: \\
жол: C:\Users\Tanja\Pictures\Dogs
сәйкес келеді:    ^ ^ ^ ^
( Іс жүзінде бірдей мысал ) Тек арнайы таңбалардың алдында кері қиғаш сызық болуы керек. Барлық басқа таңбалар әдепкі бойынша сөзбе-сөз түсіндіріледі. Мысалы, тұрақты өрнек tтек tкіші әріптерге сәйкес келеді:
үлгісі: т
жол: tttt
сәйкес келеді: ^ ^ ^ ^
( Мысал ) Дегенмен, бұл реттілік \tбасқаша жұмыс істейді. Бұл қойынды таңбасын іздеуге арналған үлгі:
үлгі: \t
жол: tttt
сәйкес келеді:   ^ ^ ^
( Мысал ) Кейбір жалпы шығу реттіліктеріне \n(UNIX стиліндегі жол үзілімдері) және \r(Windows стиліндегі жол үзілімдерінде пайдаланылады \r\n) кіреді. \r«каретканы қайтару» таңбасы болып табылады және телетайптер әлі де кең тараған кезде ASCII стандартымен бірге анықталған\n «сызық беру» таңбасы . Басқа жалпы қашу реттері осы оқулықта кейінірек қарастырылады.

Осы уақытта материалды бірнеше қарапайым басқатырғыштармен біріктірейік:

Тұрақты өрнекті табу үшін... тұрақты өрнек жазып көріңіз;) Нәтиже келесідей болуы керек:
үлгі:
жол: ...осы regex ` \[\] ` регекспен сәйкестендірілсін бе?
сәйкес келеді:                       ^^^^	
( Шешім ) Сіз басқардыңыз ба? Жарайсың! Енді келесідей қашу ретін іздеу үшін регекс жасап көріңіз:
үлгі:
жол: ` \r `, ` \t ` және ` \n ` барлығы regex шығу реті.
сәйкес келеді:   ^^ ^^ ^^
( Шешім )

4-қадам: нүкте арқылы «кез келген» таңбаны іздеңіз.

RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам.  1 - 5 бөлімАлдыңғы қадамда көрген қашу тізбегінің сәйкес шешімдерін жазғанда, сіз «кері қиғаш сызық таңбасын және одан кейінгі кез келген басқа таңбаны сәйкестендіре аламын ба?» деп ойлаған боларсыз... Әрине, мүмкін! Кез келген таңбаны сәйкестендіру үшін (дерлік) қолданылатын тағы бір ерекше таңба бар - нүкте (нүкте) таңба. Міне, ол не істейді:
үлгі: .
жол: Кешіріңіз, Дэйв. Мен мұны істей алмаймын деп қорқамын.
сәйкес келеді: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^	
( Мысал ) Егер сіз тек қашу реті сияқты көрінетін үлгілерді сәйкестендіруді қаласаңыз, келесідей әрекетті орындауға болады:
үлгі: \\. 
string: Сәлем Уолмарт менің немерем, оның аты " \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 ` бос орын таңбалары , ` \. `, ` \\ ` және ` \[ ` емес .
сәйкес келеді:   ^^ ^^ ^^ ^^	
( Бұл қазірдің өзінде жұмыс істейді ) Жоғарыдағы мысалды ескере отырып, таңбалар ауқымдары сіз күткендей жұмыс істейді. Сәйкестендіру керек бірінші және соңғы әріптердің айналасына төртбұрышты жақшаларды, арасына сызықша қойыңыз. Мысалы, егер сіз тек кері қиғаш сызықтың «жиындарын» және -ден \бір әріпті тапқыңыз келсе , келесі әрекеттерді орындауға болады: am
үлгі: \\[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 e w a lls i n th e m a ll a r e t o ta lly , т о т а л и т а л ы . 
сәйкес келеді:   ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^	
( Шешім )

6-қадам: «жоқ», каретка, циркумфлекс, каретка... белгісі^

RegEx: тұрақты өрнектерді меңгеру үшін 20 қысқа қадам.  1-7 бөлімШынында да, бұл таңбаның 9000-нан астам атауы бар :) Бірақ, қарапайым болу үшін біз «жоқ» дегенге назар аударатын шығармыз. Менің соңғы мәселенің шешімі аздап ұзақ. «Дауысты дыбыстардан басқа барлық әліпбиді ал» деп айту үшін 17 таңба қажет болды. Әрине, мұны істеудің оңай жолы бар. «Жоқ» белгісі үлгіде көрсетілгендерге сәйкес келмеуі^ тиіс таңбалар мен таңбалар ауқымын көрсетуге мүмкіндік береді . Жоғарыдағы соңғы мәселенің қарапайым шешімі - дауысты дыбыстарды білдірмейтін таңбаларды табу:
өрнек: [ ^aeiou] 
жол:   Бұл и н і м а лл а р е т о т а л ы, т о т а л ы т а л ы . 
сәйкес келеді: ^^ ^^ ^^^^ ^^^^ ^^ ^^^ ^ ^^ ^ ^^^^^^ ^ ^^^^^ ^^^ 	
( Мысал^ ) Шаршы жақшаның ішіндегі ең сол жақ таңба ретіндегі «жоқ» белгісі []тұрақты өрнек механизміне төртбұрышты жақшада жоқ бір (кез келген) таңбаға сәйкес келуін хабарлайды. Бұл жоғарыдағы тұрақты тіркес сөйлемнің басындағы барлық бос орындарға, нүктеге ., үтірге ,және бас әріптерге сәйкес келетінін білдіреді . TОларды алып тастау үшін төртбұрышты жақшаға да қоюға болады:
үлгі: [^aeiou .,T] жол  
: T h e w a lls i n th e m a ll a r e t o t ally , t o t a lly t a ll . 
сәйкес келеді:   ^ ^ ^^^ ^ ^^ ^ ^^ ^ ^ ^ ^^^ ^ ^ ^^^ ^ ^^	
( Мысалы ) назар аударыңызбұл жағдайда біз бұрын шаршы жақшаларды пайдаланбай іздеген кездегідей, кері қиғаш сызықпен нүктеден құтылудың қажеті жоқ. Шаршы жақшадағы көптеген арнайы таңбалар сөзбе-сөз өңделеді, оның ішінде ашық [- бірақ жабылатын емес - ]жақша таңбасы (неге екенін болжай аласыз ба?). Кері қиғаш сызық таңбасы \да сөзбе-сөз түсіндірілмейді. Төртбұрышты жақшаларды пайдаланып тура кері қиғаш сызықты сәйкестендіру қажет болса \, оның алдына келесі кері қиғаш сызықты қою арқылы одан құтылу керек \\. Бұл әрекет бос орын таңбаларын сәйкестік үшін төртбұрышты жақшаға орналастыруға болатындай етіп жасалған:
үлгі: [\t]
жол: tttt
сәйкес келеді:   ^ ^ ^
( Мысал ) «жоқ» белгісін ^ауқымдармен де пайдалануға болады. aЕгер мен тек , b, c, және x, кейіпкерлерін түсіргім келсе , мен келесідей нәрсені істей аламын: yz
үлгі: [abcxyz] 
жол:   abc defghijklmnopqrstuvw xyz 
сәйкес келеді: ^^^ ^^^
( Мысал ) ...немесе, мен және арасында емес кез келген таңбаны тапқым келетінін көрсете аламын : dw
үлгі: [^dw] 
жол:   abc defghijklmnopqrstuvw xyz 
сәйкес келеді: ^^^ ^^^
( Мысалы ) Дегенмен,сақ болыңыз«жоқ» арқылы ^. [^ b-f]"Жақсы, мен көрсеттім , сондықтан мен кіші әріпті aнемесе одан кейін бір нәрсені алуым керек " деп ойлау оңай f. Бұл олай емес. Бұл регекс әріптерді, сандарды, тыныс белгілерін және бос орындарды қоса, сол ауқымда емес кез келген таңбаға сәйкес келеді.
үлгі: [^dw] 
жол:   abc defg h . i , j - klmnopqrstuvw xyz 
сәйкестіктері: ^^^ ^ ^ ^ ^ ^^^
( Мысалы )

Деңгейлеу тапсырмалары:

^Төменде аяқталмайтын барлық сөздерді сәйкестендіру үшін төртбұрышты жақшадағы «жоқ» белгісін пайдаланыңыз y:
үлгі:
жіп: day dog’hog hay bot bay ray rub 
matches:      ^^^ ^^^ ^^^ ^^^	
( Шешім^ ) 1977 және 1982 (қоса алғанда) арасындағы барлық жылдарды табу үшін ауқымды және «жоқ» белгісін пайдаланып тұрақты өрнек жазыңыз :
үлгі:
жол: 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984
сәйкес келеді:            ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
( Шешім ) «жоқ» белгісі емес барлық таңбаларды табу үшін тұрақты өрнекті жазыңыз ^:
үлгі:
жол:   abc1 ^ 23*() 
сәйкес келеді: ^^^^ ^^^^^	
( Шешім )

7-қадам: Кейіпкерлер кластары

Таңбалар кластары таңбалар ауқымдарынан да қарапайым. Әртүрлі тұрақты өрнек қозғалтқыштарында әртүрлі сыныптар бар, сондықтан мен мұнда тек негізгілерін ғана қарастырамын. (Регекстің қай нұсқасын пайдаланып жатқаныңызды тексеріңіз, себебі олардың саны көбірек болуы мүмкін немесе олар мұнда көрсетілгеннен басқаша болуы мүмкін.) Таңбалар кластары дерлік ауқымдар сияқты жұмыс істейді, бірақ «бастау» және «аяқтау» мәндерін көрсете алмайсыз:
Сынып символдар
\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) 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