Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
[正規表現]メタ文字をはじめから丁寧に
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ken3ypa
October 27, 2018
350
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[正規表現]メタ文字をはじめから丁寧に
Tama.rb 2018/10/27(土)発表
ken3ypa
October 27, 2018
More Decks by ken3ypa
See All by ken3ypa
[Tama.rb年忘れLT会]レールに乗ったCSSコーディング
ken3ypa
1
840
[Rails Girls Tokyo 13th]株式会社万葉 スポンサーLT
ken3ypa
0
840
[tamarubykaigi01]こわくないDSL
ken3ypa
5
3.4k
[tama.rb#13]Hash#to_procについて
ken3ypa
0
120
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Building the Perfect Custom Keyboard
takai
2
900
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
390
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
970
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Raft: Consensus for Rubyists
vanstee
142
7.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Transcript
ϝλจࣈΛ͡Ί͔Βஸೡʹ ͚Μ(@alyoalyoalyo) 201810݄27() Tama.rb νΣϦʔຊྠಡձ
ਖ਼نදݱɺ֮͑ͯ·͔͢ʁ ͋Δͷձ
Θ͔ͬͯεοΩϦ͔ΒͷΕͯαούϦ
ඪͱ͢Δͱ͜Ζ • ਖ਼نදݱɺάάΔճΛݮΒ͍ͨ͠ • ɹຖճ͍͔ͪΒάάΔͷେม • ɹ͔ͱ͍ͬͯશ෦͙֮͑͢ΒΕͳ͍ • ɹ࠷ݶ֮͑Δͱ͜Ζ͚͍֮ͩ͑ͨ
࠷ݶʝ [\040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x 80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\ \x80-\xff\n\015()]*)*\)[\040\t]*)*(?:(?:[^(\040)<>@,;:".\\\[\]\000 -\037\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|"[^\ \\x80-\xff\n\015"]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015"]*)*")[\04 0\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\ xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80 -\xff\n\015()]*)*\)[\040\t]*)*(?:\.[\040\t]*(?:\([^\\\x80-\xff\n\0 15()]*(?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\x
ff][^\\\x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t] *)*(?:[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+(?![^(\040)<>@,;:" .\\\[\]\000-\037\x80-\xff])|"[^\\\x80-\xff\n\015"]*(?:\\[^\x80-\xf f][^\\\x80-\xff\n\015"]*)*")[\040\t]*(?:\([^\\\x80-\xff\n\015()]*( ?:(?:\\[^\x80-\xff]|\([^\\\x80-\xff\n\015()]*(?:\\[^\x80-\xff][^\\ \x80-\xff\n\015()]*)*\))[^\\\x80-\xff\n\015()]*)*\)[\040\t]*)*)*@[ \040\t]*(?:\([^\\\x80-\xff\n\015()]*(?:(?:\\[^\x80-\xff]|\([^\\\x8 0-\xff\n\015()]*(?:\\[^\x80-\xff][^\\\x80-\xff\n\015()]*)*\))[^\\\ x80-\xff\n\015()]*)*\)[\040\t]*)*(?:[^(\040)<>@,;:".\\\[\]\000-\03 7\x80-\xff]+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff])|\[(?:[^\ \\x80-\xff\n\015\[\]]|\\[^\x80-\xff])*\])[\040\t]*(?:\([^\\\x80-\x
ͦ͏ɺϝλจࣈ
ϝλจࣈͬͯʁ • ͦͷจࣈຊདྷͷҙຯͰͳ͘ɺϓϩάϥϜͰಛผͳҙ ຯΛ࣋ͨͤͨจࣈͷ͜ͱ • (ྫɿʮ+ʯͱϝλจࣈʮ+ʯผͷҙຯΛ࣋ͭ) • ༁͢Δͱจࣈɹ • ਖ਼نදݱΛࢧ͑Δɺॏཁͳٕज़
• ͦΜͳʹݸଟ͘ͳ͍(͚Ͳ͙͢ΕΔ) • ͱ͍͏͔͜Εԡ͑͞ͳ͍ͱ͕࢝·Βͳ͍
ͱ͍͏͜ͱͰ ࠷ݶ͓͖͍֮͑ͯͨ ϝλจࣈΛ͝հ
ͰΜʂʂ
·ͣࠓճ֮͑Δ͖ͷΛશͯோΊΔ /P ϝλจࣈ ?
\^ c <> a
ଟ͘Ͷ ( ^ω^;)
͋ͱ͜ͷه߸ͳΜͯಡΉΜͩΑ ^ ←͜Εͱ͔ []{}() ͜Εͱ͔͘͢͝ฆΒΘ͍͠
ͷͰ
άϧʔϐϯάԽͯ͠ ݸผʹղઆͯ͠Έͨ
3ͭͷάϧʔϓ
ࡾͭͷάϧʔϓ • (1)1จࣈϚον • (2)܁Γฦ͠ • (3)άϧʔϐϯά͢Δͷ ɹɹɹɹɹɹɹɹɹɹɹɹͷࡾͭͰ͝հ͠·͢
(1) 1จࣈϚον
ҰͭͷจࣈྻΛѻ͏ ϝλจࣈ ػೳ ? ߦͷઌ಄ͷҐஔʹ Ϛον ߦͷඌͷҐஔʹ Ϛον
લͷจࣈʹϚον
ߦ಄Ϛον ߲ આ໌ ه߸ ? ಡΈํ ΩϟϨοτɺϋοτ ػೳ ߦͷઌ಄ͷҐஔʹ Ϛον
༻ྫ IUUQSVCVMBSDPNS 4-"MK[RS#
ߦ಄Ϛον • จষͷઌ಄ͷҐஔʹϚον • ٯʹݴ͑ઌ಄ʹͳ͍ͱϚον͠ͳ͍
ߦϚον ߲ આ໌ ه߸ ಡΈํ υϧɾυϧϚʔΫ ػೳ ߦͷඌͷҐஔʹ Ϛον
༻ྫ IUUQSVCVMBSDPNS J%*FS.
ߦϚον • ߦͷඌͷҐஔʹϚον • ٯʹݴ͑ඌʹͳ͍ͱϚον͠ͳ͍ • ͭ·Γ͖ͬ͞ͷٯ
ͳΜͰϚον ߲ આ໌ ه߸ ɾ ಡΈํ ϐϦΦυɺυοτ ػೳ લͷจࣈʹϚον ༻ྫ
IUUQSVCVMBSDPNS Z1F3KXOZ(
ͳΜͰϚον • ҙͷ1จࣈʹϚονͤ͞Δ͜ͱ͕Ͱ͖Δ • ϙʔΧʔେ߽ʹ͓͚ΔδϣʔΧʔʹ͍ۙ
(2)܁Γฦ͠
܁Γฦ͠ ϝλจࣈ Ϛον͢Δέʔε લͷจࣈύλʔϯ͕ ճҎ্࿈ଓ͢Δ લͷจࣈύλʔϯ͕ ճҎ্࿈ଓ͢Δ લͷจࣈύλʔϯ͕ ճ͘͠ճҎ্࿈ଓ͢Δ \O^
લͷจࣈύλʔϯ͕ OճҎ্࿈ଓ͢Δ
܁Γฦͬͯ͠ʁ • ܁Γฦ͠ͷྔΛࢦఆ͠ɺ֘͢ΔͷͱϚονϯά • ʮྔࢦఆࢠʯͱݺΕΔ • ӳޠͰ͍͏ͱgeneral repetition quantifier(൚༻ͷ ܁Γ
ฦ͠ͷྔΛද͢Ҽࢠ)
* ߲ આ໌ ه߸ ಡΈํ ΞελϦεΫ ػೳ લͷจࣈύλʔϯ͕ճҎ্ ࿈ଓ͢ΔͷʹϚον ༻ྫ
IUUQSVCVMBSDPNS OI94/-GV.
* • 0ճҎ্Ϛονͬͯʁ • લͷҰจࣈলུՄೳɺͱ͍͏ҙຯ • ਤதͦΕͧΕ0ճɾ1ճɾ2ճɾ3ճϚον
? ߲ આ໌ ه߸ ಡΈํ ΫΤενϣϯϚʔΫ ػೳ લͷจࣈύλʔϯ͕ճ ·ͨճ࿈ଓ͢ΔͷʹϚον ༻ྫ
IUUQSVCVMBSDPNS %G"WW+[
? • 0ճ·ͨ1ճ • 2ճҎ্࿈ଓ͢ΔͷʹϚον͍ͯ͠ͳ͍
+ ߲ આ໌ ه߸ ಡΈํ ϓϥε ػೳ લͷจࣈύλʔϯ͕ճҎ্ ࿈ଓ͢ΔͷʹϚον ༻ྫ
IUUQSVCVMBSDPNS S--(7L7
+ • 1ճҎ্ͳͷͰલจࣈলུͰ͖ͳ͍ • *ͱ?ͱͷҧ͍Λҙࣝ͢͠
ؓٳ +ͱ͔*ͱ͔ʁͱ͔ɺ৭ʑ͋ΔͷΘ͔ͬͨΜͰ͚͢Ͳ ػೳ͕ࣅ͍֮ͯͯ͑ʹ͍͘ΜͰ͕͢ʝ
ؓٳ ( ʈωʈ) ͜͜ʹJISྻͷ ɹɹɹΩʔϘʔυ͕ ɹɹɹ͋Δ͡ΌΖʁ
ؓٳ ( ʈωʈ) ࣮͜͏͡Ό
None
{n} ߲ આ໌ ه߸ \O^ ಡΈํ ϒϨʔε ׅހɺதׅހ ػೳ લͷจࣈάϧʔϓͷ
OճҎ্ͷ܁Γฦ͠ʹϚον ༻ྫ IUUQSVCVMBSDPNS U[U,L+C
{n} • {}ʹࢦఆͨ͠ͷจࣈʹϚον͢Δ • a{2}ͳΒa͕2ճ࿈ଓ͍ͯ͠ΔͷʹϚον
{n}ͷछྨ ճͷߜΓࠐΈ͕Ͱ͖ΔͷͰɺޮత͔ͭ҆৺ײ͕͋Δ ߲ \O^ \O ^ \ O^ \O N^
ػೳ લͷจࣈΛ Oճ OճҎ্ OճҎԼ OճҎ্NճҎ Լ
·ͱΊ ճ ه߸ ҙຯ ճҎ্ͷ܁Γฦ͠ʹ Ϛον d ճҎ্ͷ܁Γฦ͠ʹ Ϛον
PS ճ·ͨճͷ܁Γ ฦ͠ʹϚον ࢦఆճ \O^ Oճͷ܁Γฦ͠ʹ Ϛον ࢦఆճҎ্ \O ^ OճҎ্ͷ܁Γฦ͠ʹ Ϛον ࢦఆճҎ্ɺࢦఆճ ҎԼ \O N^ OճҎ্NճҎԼͷ ܁Γฦ͠ʹϚον
(3)ෳจࣈΛѻ͏ͷ
ෳͷจࣈྻΛѻ͏ ϝλจࣈ ػೳ c cͰ۠ΒΕͨ ͍ͣΕ͔ͷจࣈྻʹϚον ਖ਼نදݱͷάϧʔϓԽ <> จࣈΫϥεͷ࡞
a จࣈΫϥεͷলུه๏ όοΫεϥογϡه๏
| ߲ આ໌ ه߸ c ಡΈํ όʔςΟΧϧόʔ ػೳ cͰ۠ΒΕͨจࣈྻͷ͍ͣΕ͔ͷ จࣈྻʹϚον
༻ྫ IUUQSVCVMBSDPNS WB/F'NH
| • |Ͱ۠ΒΕͨจࣈΛϚονͰ͖Δ • orͱಡΈସ͍͍͑ͯ • A | B ͳΒAͱBʹϚον
[ ] ߲ આ໌ ه߸ <> ಡΈํ େ͔ͬ͜ɺϒϥέοτ ػೳ Χοίͷ͍ͣΕ͔ͷจࣈ
༻ྫ IUUQSVCVMBSDPNSJDR2[UQJ"
[ ] • []ͷจࣈɺҰͭͷ·ͱ·ͬͨจࣈྻͰͳ͘ݸʑͷจࣈͱͯ͠ѻΘΕΔ • ͳͷͰԼهͷྫͩͱʮஉʯʮੑʯʮ͞ʯʮΜʯ͕ݸผʹϚον͢Δ
[ ]ੜɿ^Λ͚ͭΔͱ൱ఆͷҙຯ ߲ આ໌ ه߸ <?> ಡΈํ ൱ఆ͖େ͔ͬ͜ɺϒϥέοτ ػೳ Χοίͷ͍ͣΕ͔ͷ
จࣈҎ֎ͷͷ ༻ྫ IUUQSVCVMBSDPNS J',4(3QBJO
[]ͷলུه๏ • []ͷจࣈҎ֎ͷͷ͕Ϛον͢Δ • ͳͷͰԼهͷྫͩͱʮஉʯʮੑʯʮ͞ʯʮΜʯҎ֎ͷͷ͕Ϛον͢Δ
( ) ߲ આ໌ ه߸ ಡΈํ ؙ͔ͬ͜ɺύʔϨϯ ػೳ άϧʔϓΛ࡞Δ
༻ྫ ߲࣍
( ) • []ͱҧ͍άϧʔϓͱͯ͠ѻ͏ͷͰॱং͕อͨΕΔ • ্هͷಛੑ͔Β | ͱ૬ੑ͕ྑ͍
\ ߲ આ໌ ه߸ a ಡΈํ όοΫεϥογϡ ػೳ ɾϝλจࣈΛΤεέʔϓ͢Δ ɾa
ಛఆͷӳࣈͰจࣈͷলུه๏Λ࡞Δ ༻ྫ IUUQSVCVMBSDPNSJDR2[UQJ"
Τεέʔϓͬͯʁ • ਖ਼نදݱதͩͱɺ͋Δछͷه߸ϝλจࣈͱͯ͠ೝࣝ͞Εͯ͠·͏ • ϝλจࣈͱͯ͠ͷҙຯΛଧͪফ͢͜ͱΛΤεέʔϓͱ͍͏
จࣈͷলུه๏ লུه๏ આ໌ লུݩ උߟ aX ӳࣈ <B[";@> XPSE a8
ඇӳࣈ <?B[";@> 803% aT ۭനจࣈ <aUaSaOaGaW> TQBDF a4 ඇۭനจࣈ <?aUaSaOaGaW> 41"$& aE ਐࣈ <> EJHJU a% ඇਐࣈ <?> %*(*5 aI ਐࣈ <BG"'> IFYBEFDJNBM OVNCFS a) ඇਐࣈ <?BG"'> )&9"%&$*."- /6.#&3 Մಡੑ͕͕͋ΔͷͰͥͻ͍͖ͬͯ·͠ΐ͏
লུه๏ɺ৭ʑ͋Δ͚Ͳ4छྨ • େจࣈͩͱʮҎ֎ʯʹͳΔΑ • ӳࣈ͔ ۭനจࣈ͔(w ͱ s) • 10ਐ͔
16ਐ͔(d ͱ h )
࠶ܝ ࠷ॳʹோΊͨ࣌ͱൺΔͱɺͪΐͬͱΘ͔ΔΑ͏ʹͳͬͯ·ͤΜ͔ʁ /P ϝλจࣈ ?
\^ c <> a
͔֮ͤͬ͑ͨ͘Μ͔ͩΒ ͳΜ͔Ϳͬ͜͵͍ͯΈ͍ͨ
grep • grepͯ͠ΈΔ • StringΫϥε͕࣋ͬͯΔΠϯελϯεϝιουͱ͔
match • ࠓ࡞ۀ͠ͳ͕Βௌ͍ͯΔYoutubeͷύϥϝʔλͱ͔
gsub • ൵͍͠աڈΛٹࡁͯ͋͛͠Δͱ͔ʝ
ਖ਼نදݱɺศརͰ͢Ͷʂ ৭ʑ͍͖ͬͯ·͠ΐ͏ʂʂ