Slide 1

Slide 1 text

ਖ਼نදݱͷجຊ Regular expressions basics

Slide 2

Slide 2 text

Swift Regex

Slide 3

Slide 3 text

https://swiftregex.com/

Slide 4

Slide 4 text

ਖ਼نදݱͱ͸ • จࣈྻͷू߹ʢύλʔϯʣΛද͢൚༻తͳه๏ • [bc]ook͸book·ͨ͸cookʹϚον͢Δ

Slide 5

Slide 5 text

Ϧςϥϧ Literal Characters • a • Jack is a boy, • cat • About cats and dogs

Slide 6

Slide 6 text

ϝλจࣈ Special Characters (Meta Characters) • ಛผͳҙຯΛ࣋ͭ12ͷจࣈʢϦςϥϧͱͯ͠ѻ͏ʹ͸Τεέʔϓ͕ඞཁɻʢྫʣ1\+1=2ʣ • όοΫεϥογϡ \ • ΩϟϨοτ ^ • υϧϚʔΫ $ • υοτʢϐϦΦυʣ . • ύΠϓ | • ΫΤενϣϯϚʔΫ ? • ΞελϦεΫ * • ϓϥε + • ։ؙ͖Χοί ( • ดؙ͡Χοί ) • ։͖֯Χοί [ • ։͖೾Χοί {

Slide 7

Slide 7 text

੍ޚจࣈ Non-Printable Characters (Control Characters, Escape sequence) • \t • λϒʹϚον͢Δ • \n • վߦʹϚον͢Δ

Slide 8

Slide 8 text

จࣈΫϥε Character Classes (Character Sets) • ෳ਺ͷจࣈͷத͔Β̍ͭͷจࣈʹϚον͢Δ • a·ͨ͸eʹϚονͤ͞Δʹ͸[ae]ͱॻ͘ • ʢྫʣgr[ae]y • gray·ͨ͸greyʹϚον • จࣈΫϥε͸1ͭͷจࣈʹϚον͢Δ • Χοίͷதͷจࣈͷॱং͸ؔ܎ͳ͍

Slide 9

Slide 9 text

จࣈΫϥε Character Classes (Character Sets) • จࣈΫϥεͷதͰϋΠϑϯΛ࢖༻ͯ͠ൣғΛࢦఆͰ͖Δ • [0-9] • ͔̌Β̕ͷؒͷܻ̍ͷ਺ࣈʹϚον • [0-9a-fA-F] • େจࣈͱখจࣈΛ۠ผͤͣʹɺ16ਐ਺ͷ਺ࣈܻ̍ʹϚον • ൱ఆจࣈΫϥεʢNegated Character Classesʣ • [^0-9\r\n] • ਺ࣈ·ͨ͸վߦͰͳ͍೚ҙͷจࣈʹϚον

Slide 10

Slide 10 text

จࣈΫϥεʢͷུه๏ʣ Shorthand Character Classes • จࣈΫϥεͷதͰΑ͘࢖ΘΕΔ΋ͷΛ؆୯ʹॻ͚ΔΑ͏ʹ͋Β͔͡Ί༻ҙ͞Εͨه๏ • \d͸[0-9]ͷུه๏ • UnicodeΛαϙʔτ͢Δ؀ڥͰ͸׽਺ࣈ΍ؙ਺ࣈͳͲ͢΂ͯͷ਺ࣈʹϚον • \w “word character” [A-Za-z0-9_]ͱಉ͡ʢΞϯμʔείΞؚ͕·ΕΔ͜ͱʹ஫ҙʣ • UnicodeΛαϙʔτ͢Δ؀ڥͰ͸͍Ζ͍ΖͳจࣈʹϚον • \s “whitespace character” ۭനจࣈʹϚον [ \t\r\n\f] • UnicodeΛαϙʔτ͢Δ؀ڥͰ͸UnicodeͷʮseparatorʯΧςΰϦͷ͢΂ͯͷจࣈʹϚον

Slide 11

Slide 11 text

υοτʢϐϦΦυʣ The Dot Matches (Almost) Any Character • վߦจࣈΛআ̍͘จࣈʹϚον • “dot matches all”·ͨ͸“single line”Ϟʔυʢϓϩάϥϛϯάݴޠ΍ਖ਼نදݱΤ ϯδϯʹΑͬͯݺͼํ͸ҟͳΔʣΛࢦఆ͢ΔͱվߦจࣈΛؚΉ೚ҙͷ1จࣈʹ Ϛον • gr.y͸ɺgrayɺgrayɺgr%yͳͲʹϚον • υοτ͸ڧྗʹͳΜͰ΋Ϛον͢ΔͷͰ࢖͍͗͢ͳ͍ • จࣈΫϥε΍൱ఆจࣈΫϥεΛ୅ΘΓʹ࢖͏

Slide 12

Slide 12 text

ΞϯΧʔ Anchors • จࣈͰ͸ͳ͘ҐஔʹϚον • ^ • จࣈྻͷઌ಄ʹϚον • $ • จࣈྻͷ຤ඌʹϚον • ΄ͱΜͲͷਖ਼نදݱ͸“multi-line”Ϟʔυ͕͋Γɺ ^͸վߦͷޙΖɺ $͸վߦͷલʹϚον͢Δ • \b • ୯ޠڥքʹϚον • ୯ޠڥքͱ͸\wͰϚονͰ͖ΔจࣈͱɺͰ͖ͳ͍จࣈͷؒͷҐஔ

Slide 13

Slide 13 text

બ୒ Alternation • ࿦ཧ࿨ʢORʣ • cat|dog • About cats and dogs • cat|dog|mouse| fi sh • ޷͖ͳ͚ͩͭͳ͛Δ͜ͱ͕Ͱ͖Δ • cat|dog food • cat·ͨ͸dog foodʹϚον • cat food͔dog foodʹϚονͤ͞Δʹ͸ɺ(cat|dog) foodͷΑ͏ʹબ୒ΛάϧʔϓԽ͢Δ

Slide 14

Slide 14 text

܁Γฦ͠ Repetition • ΫΤενϣϯϚʔΫʮ?ʯ • Optional • colou?r͸color·ͨ͸colourʹϚον • ΞελϦεΫʮ*ʯ • ̌ճҎ্ͷ܁Γฦ͠ • <[A-Za-z][A-Za-z0-9]*> • ଐੑ͕ͳ͍HTMLλάʹϚον • ϓϥεʮ+ʯ • ̍ճҎ্ͷ܁Γฦ͠ • ೾Χοίʮ{n,m}ʯ • ࢦఆճ਺ͷ܁Γฦ͠ • \b[1-9][0-9]{3}b • 1000͔Β9999ͷ਺ࣈʹϚον • \b[1-9][0-9]{2,4}\b • 100͔Β99999ͷ਺ࣈʹϚον

Slide 15

Slide 15 text

άϧʔϓͱΩϟϓνϟ Grouping and Capturing • ΧοίͰғΉͱάϧʔϓԽ͞ΕΔ • άϧʔϓʹରͯ͠܁Γฦ͠ΛࢦఆͰ͖Δ • Set(Value)? • Set·ͨ͸SetValueʹϚον • ௨ৗͷؙΧοί͸ΩϟϓνϟάϧʔϓΛ࡞੒͢Δ • Set(Value)?ͷਖ਼نදݱͰSetValue͕Ϛονͨ͠৔߹͸ɺάϧʔϓ̍ʹΞΫηε͢ΔͱValue͕औΓग़ͤΔ • Ωϟϓνϟ͕ඞཁͳ͍৔߹͸Set(?:Value)?ͱ͢ΔͱΩϟϓνϟ͠ͳ͍άϧʔϓ͕࡞੒Ͱ͖Δ • ؙΧοίͷޙͷΫΤενϣϯϚʔΫͱɺ̌ճҎ্ͷ܁Γฦ͠ͷࢦఆͷΫΤενϣϯϚʔΫΛࠞಉ͠ͳ͍Α͏ʹ ஫ҙ

Slide 16

Slide 16 text

ޙํࢀর Backreferences • ΩϟϓνϟάϧʔϓͰΩϟϓνϟʢϚονʣͨ͠಺༰ʹϚον • ΩϟϓνϟάϧʔϓʹϚονͨ݁͠ՌΛ࠶ར༻Ͱ͖Δ • <([A-Z][A-Z0-9]*)\b[^>]*>.*?\1> • HTMLλάʹϚονʢΩϟϓνϟάϧʔϓʹϚονͨ͠։࢝λάΛऴྃλάͰ ࠶ར༻͍ͯ͠Δʣ

Slide 17

Slide 17 text

໊લ෇͖άϧʔϓʢΩϟϓνϟʣͱޙํࢀর Named Groups and Backreferences • Ωϟϓνϟ΁ͷࢀরΛ൪߸Ͱ؅ཧ͢Δͷ͸େมͩ͠ɺ௥Ճ࡟আͰͣΕΔͷͰ໊લΛ෇͚ΒΕΔ • ߏจʢ໊લ෇͖άϧʔϓʣ • (?Pgroup) • ߏจʢޙํࢀরʣ • (?P=name) • <(?P[A-Z][A-Z0-9]*)\b[^>]*>.*?(?P=tag)> • HTMLλάʹϚονʢ <([A-Z][A-Z0-9]*)\b[^>]*>.*?\1>ͱಉ͡ʣ • ߏจʢ໊લ෇͖Ωϟϓνϟʢ.NETʣʣ • (?group)·ͨ͸(?’name'group) • ߏจʢ໊લʹΑΔࢀরʢ.NETʣʣ • \k·ͨ͸\k'name'

Slide 18

Slide 18 text

ઌಡΈͱޙಡΈ Lookaround (Lookahead/Lookback(Lookbehind)) • ಛघͳάϧʔϓͰɺΞϯΧʔͷΑ͏ʹϚονͨ݁͠ՌͷҐஔΛࢦఆ͢Δ • ʢྫʣ\d+(?=€) • ੔਺஋ͷޙʹʮ€ʯ͕ଓ͘จࣈྻʹϚον • 1 turkey costs 30€ͷ30ʹϚον • ߏจʢߠఆઌಡΈʢPositive lookaheadʣʣ • X(?=Y) • ߏจʢ൱ఆઌಡΈʢNegative lookaheadʣʣ • X(?!Y) • ߏจʢߠఆޙಡΈʢPositive lookbehindʣʣ • (?<=Y)X • ߏจʢ൱ఆޙಡΈʢNegative lookbehindʣʣ • (?

Slide 19

Slide 19 text

References • Regular-Expressions.info
 https://www.regular-expressions.info/ • Swift Regex
 https://swiftregex.com/