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
似たもの同士のPerlとPHP
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
uzulla
November 29, 2024
Programming
320
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
似たもの同士のPerlとPHP
2024-11-30
紅白ぺぱ合戦 : ぺぱBaanGaai LT
https://connpass.com/event/329428/
uzulla
November 29, 2024
More Decks by uzulla
See All by uzulla
ALL CODE BASE ARE BELONG TO STUDY
uzulla
30
7.9k
バイブスあるコーディングで ~PHP~ 便利ツールをつくるプラクティス
uzulla
1
620
PHPer's Guide to Daemon Crafting Taming and Summoning
uzulla
2
2.9k
More Context, Better Code. 既存コードやOAS等をコンテキストとしてLLMに与える事で、よりよいコード生成を行う話
uzulla
1
240
あなたのアプリ、ログはでてますか?あるいはログをだしてますか? (Funabashi.dev用 軽量版)
uzulla
3
350
セッションのトークセッション / Traps for PHP session features in growing web apps
uzulla
2
240
Crafting a Own PHP - ウキウキ手作りミニマリストPHP
uzulla
5
3.4k
例外を投げるのをやめてみないか? あるいは受け入れてみないか? - How to use exceptions other than throwing
uzulla
6
1.6k
PHPerが ISUCONでやるべき事
uzulla
1
1.9k
Other Decks in Programming
See All in Programming
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
2
1k
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
110
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
190
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
28
33k
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
180
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
440
Verilogで学ぶCPU自作入門
uyuki234
8
4.2k
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
Seven New Principles of Software Engineering
yegor256
0
110
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Six Lessons from altMBA
skipperchong
29
4.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.3k
Between Models and Reality
mayunak
4
500
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
410
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Building an army of robots
kneath
307
47k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
710
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
Transcript
ࣅͨͷಉ࢜ͷ 1FSMͱ1)1 w ߚനͺ߹ઓͺ#BBO(BBJ-5 w IUUQTDPOOQBTTDPNFWFOU
ࣗݾհ w 1FSM.POHFSʹ1)1ͷਓɺ1)1ͷਓʹ1FSMͷਓͱ ͍ΘΕΔίϞϦͷV[VMMBͰ͢ w )BDIJPKJQNͱ͍͏QN 1FSM.POHFSͷ.FFUVQ Λओ࠵͍ͯ͠·͢ w ͱ͍͑ɺ࠷ۙΊ͖ͬΓ1FSMͷਓͱࢥΘΕͳ
͘ͳΓ·ͨ͠Ͷʜ w ͜ͷͰإ͕͍ํ Β͍͠ ͳͷͰɺനࠇ͔ͭ ͳ͍άϨʔκʔϯύʔιϯͱͯ͜͜͠ʹ͍ΔͬΆ ͍Ͱ͢
ͱ͍͏͜ͱͰʜ w 1FSMͱ1)1ͰΑ͘ࣅͯΔͷͱ͍͑ʜ
None
w ʮΈΜͳ͖ͩΖʯʮͦ͏͔ʁʁʯ w ʮ৭͕פ৭ܥʯʮʁʁʁʯ
w ਖ਼نදݱͰ͢Ͷʂʂʂ w 1)1ͷਖ਼نදݱ1$3& 1FSM$PNQBUJCMF3FHVMBS&YQSFTTJPOT w ʮޓੑ͕͋Γͦ͏ʂʂʂʯ w ࣮ࡍͦͬ͘Γʂʂ ʁ
ʮ͑ͬʯ
ΤϯδϯࣅͯΔ͕ɺΠϯλʔϑΣʔε͕ҧ͏ w 1FSM͜ΜͳϦςϥϧ ͕͋Δ $txt = "ABC"; $txt =~ s/A/a/;
print $txt; w 1)1͜ΜͳؔΛ͏ $txt = preg_replace("/A/u", "a", "ABC"); echo $txt; w *'Ҏ֎ͦͬ͘Γʂʂʂ
Ωϟϓνϟͷྫ1)1 preg_match( '| (?P<scheme> https?) # SchemeΛΩϟϓνϟ :// # "://"
(?P<host> [^/\s]+) # ϗετ໊ΛΩϟϓνϟ |x', "https://test.com/", $matches ); $scheme = $matches['scheme']; $host = $matches['host'];
Ωϟϓνϟͷྫ1FSM $input = "https://test.com"; $input =~ m{ (?<scheme> https?) #
SchemeΛΩϟϓνϟ :// # "://" (?<host> [^/\s]+) # ϗετ໊ΛΩϟϓνϟ }x; my $scheme = $+{scheme}; # ͕݁͜͜ߏΫη͔ͳʁ my $host = $+{host};
ஔͷྫ1FSM $input =~ s/abc/ do { # ͜ͷதʹίʔυ͕ॻ͚Δ my $matched
= $&; # Ωϟϓνϟͨ͠ͷΛͱΓͩ͠ uc($matched); # ॲཧΛॻ͖ɺ࠷ޙͷධՁ͕ஔޙʹ } /ge; # ʮҎԼͰ͑͑Ζʯʮ͔ͨ͠ʹʯ(ucͱ͍͏func͕͋Γ·͢) $input =~ s/(abc)/uc($1)/ge;
ஔͷྫ1)1 preg_replace_callback("/abc/", function($matches) { return strtoupper($matches[0]); }, $input); w ศརػೳɺΠϯϥΠϯจࣈྻ࿈݁Մೳͳ&WBMةݥͳͷͰফ͑·ͨ͠
# php<=5.4 ϑϥάʹeΛ͚ͭΔͱevalͰ͖ͨ $func = "strtoupper"; preg_replace("/abc/e", $func."('\\0')", $input);
දʹͯ͠ΈΔ ಛ 1FSM 1)1 جຊࢀর a a a aʢಉ͡ʣ ໊લ͖ఆٛ
(?<name>pattern) (?P<name>pattern) ໊લ͖ࢀর \k<name> \k'name' (?P=name) Ωϟϓνϟ݁Ռ $1 $2͕ࣗಈͰએݴɻ ໊લ͖ͩͱ$+{name} Ҿʹ$matchesͳͲΛࢦఆ ͢Δͱ࿈ྻ͕એݴ͞ΕΔ ࣗಈม $_ ػೳͱͯ͠ͳ͍
ͦͬ͘ΓͰ͢Ͷʂ w ਖ਼نදݱࣗମͷه๏΄΅ҰॹͳΜΑͶɺߏจɺͷग़͠ೖΕͷํ๏͕ͪΐͬ ͱҧ͏͘Β͍ɻ `preg_replace` <=> `s///` `preg_match` <=> `m///`
w Ͳ͕͖ͬͪͰ͔͢ʁ
w 1)1FS ʮͳΜ͔ʜ1FSMͷํ͕͓͠ΌΕͩͳΝʂʯ w Ұൠ௨ա1)1FS ʮ͓͠ΌΕʜʁͨͱ͑͜͏͔ʁʯ $_ = "https://example.jp"; if
(m<https?://(?<host>[^/]+)>) { print "Host: $+{host}\n"; } w 1)1FS ʮ͓͠ΌΕʂʯ
தؒ·ͱΊ w ૬ޓͰॴॴ͋Δ ʁʁʁ w ͪΐͬͱؾΛ͚Ε૬ޓͰΘ͔Γ͋͑ͦ͏ w ͔ͩΒ1FSMͱ1)1૬ੑ͕ʜྑ͍ʂʂʂ ॾઆ͋Δ w
͔͠͠ͳ͕ΒΓݴޠ͕ҧ͑ࡉ͔͍ࠩ͋Δ w 1)1FSͱ1FSM.POHFS͕͓ޓ͍ʹ͢ΕҧΘͳ͍ͨΊʹʜ
ΫΠζ͠·͠ΐ͏ʂʂ Կ൪Ḧͩ͜͡Εʁʁʁ
2ߦͷઌ಄Ϛον Regex: m/^Second/ Input: "First line\nSecond line" Result: Ϛον͋Γ A)
Perl B) PHP C) ྆ํ
͑# 1)1 ղઆ1)1σϑΥϧτͰ֤ߦͷઌ಄ʹϚον͠·͢ɻ1FSMͰσϑΥϧτͰจࣈ ྻશମͷઌ಄ʹ͔͠Ϛον͠·ͤΜɻ1FSMͰ֤ߦͷઌ಄ʹϚονͤ͞Δʹɺmϑ ϥάʢϚϧνϥΠϯϞʔυʣ͕ඞཁͰ͢ɻ
2ෳߦϚονϯά Regex: m/.+/ Input: "hello\nworld" Result: Ϛον༗Γɺൣғ "hello\nworld" A) Perl
B) PHP C) ྆ํ
͑" 1FSM ղઆ1FSMσϑΥϧτͰυοτ ͕վߦʹϚον͠·͢ɻͭ·Γɺෳߦʹ·ͨ ͕ΔจࣈྻશମʹϚον͠·͢ɻ 1)1ͰσϑΥϧτͰυοτ վߦʹϚον͠ͳ͍ͨΊɺෳߦʹ·͕ͨΔϚ ονϯάΛߦ͏ʹsϑϥάʢ1$3&@%05"--
υοτΦʔϧϞʔυʣ͕ඞཁͰɺ ςετ͕ශऑͳίʔυͰ͜͠͠ͷόάΛݟ͔͚·͢ɻ php > preg_match_all("/.+/", "hello\nworld", $m); var_dump($m); array(1) { [0]=> array(2) { [0]=> string(5) "hello" [1]=> string(5) "world" } }
2ϩάղੳύλʔϯ Regex: m/^(\d{4}-\d{2}-\d{2}).*/ Input: 2024-01-01 Error 2024-01-02 Warning Expected: 2ߦϚον
Actual: 1ߦϚον όάͷݪҼʁ A) PerlͰ/mϑϥά͕ඞཁ B) PHPͰmϑϥάΛআ͢Δඞཁ͕͋Δ C) ೖྗͷվߦίʔυ͕ҧ͏
͑" 1FSMͰNϑϥά͕ඞཁ ղઆ1FSMͰϩάϑΝΠϧղੳΛߦ͏ࡍɺ^͕֤ߦͷઌ಄ʹϚον͢ΔΑ͏ʹ͢Δʹ mϑϥάʢϚϧνϥΠϯϞʔυʣ͕ඞཁͰ͢ɺͦ͏͠ͳ͍ͱจࣈྻͷઌ಄ʹͷΈ Ϛονͯ͠͠·͍·͢ɻ 1)1ͰσϑΥϧτͰ֤ߦͷઌ಄ʹϚον͠·͢ɻ ͕ɺͦͷ͍ͤͰվߦΛߟྀ͠ͳ͍ ͰΑ͍ͱ৴͡ࠐΜͩ ࣌ʹ^$ͷ᠘ ͠͠ɺΫ
ϦςΟΧϧͳόϦσʔγϣϯϛεʹͳΔ ͕ଟ͘ɺେͷ߹\A\z จࣈྻͷઌ ಄ͱɺऴ Λ͏͖ͩͱࢲࢥ͍·͢ ॾઆ͋Δ
26OJDPEFจࣈΫϥε Regex: m/\w+/ Input: "͜Μʹͪ" Result: No Match A) Perl
B) PHP C) ྆ํ
͑$ ྆ํ ղઆ1FSMͰ\w͕σϑΥϧτͰ"4$**จࣈʹͷΈϚον͠·͢ɻ 6OJDPEFจࣈʹϚονͤ͞Δʹɺίʔυʹͯuse utf8;ϓϥάϚΛ༻͢Δ ͷඞཁ͕͋Γ·͢ɻ 1FSM.POHFSʮࢦఆ͠ͳ͍ͱ͔͋Γ͑ͳ͍ͩΖɺഅࣛʹͯ͠Δͷ͔ʯ ࢲʮŰŘŕʯ ·ͨɺ1)1ͰจࣈྻόΠφϦͱͯ͠ѻΘΕΔͷͰɺ"/\w+/u",ͱVUGϑϥ άΛ͚ͭ·͢ɻ
1)1FSʮ͜͜ʹຊޠ͜ͳ͍͠ʯ ീԦࢠࡏॅ1)1FSʮ͍͍͔ΒVΛ͚ͭͱ͚ʯ
2େจࣈখจࣈม Regex: s/(\w+)/\U$1/g Input: "hello world" Result: "HELLO WORLD" A)
Perl B) PHP C) ྆ํ
͑" 1FSM ղઆ1FSMΈࠐΈͷ\UมΛαϙʔτ͓ͯ͠Γɺਖ਼نදݱͷஔͰେจࣈม ͕ՄೳͰ͢ɻ ਖ਼نදݱͱ͍͍ͭͭɺػೳతʹਖ਼نදݱͰͳΜͰͳ͘ɺจࣈྻॲཧͰ͢ ͕ʜ \uɺจࣈ͚ͩେจࣈʹ͢Δͱ͔Ͱ͖ͯศར IFMMP)FMMP ʜͦ͏ʜ͚ͩͲͭ ͔ͬͨ͜ͱͳ͍ͳʁ
1)1Ͱಉ༷ͷมΛߦ͏ʹpreg_replace_callbackؔΛ༻ͯ͠ίʔϧ όοΫͰstrtoupperؔΛݺͼग़͢ඞཁ͕͋Γ·͢ɻ
2ޙํࢀর Regex: m/(<([a-z]+)>.*?</\2>)/ Input: "<div>content</div>" Result: Match! A) Perl B)
PHP C) ྆ํ
͑$ ྆ํ ղઆʹΑΔޙํࢀর1FSMͱ1)1ͷ྆ํͰαϙʔτ͞Ε͍ͯ·͢ɻ ͲͪΒͷݴޠͰɺΩϟϓνϟάϧʔϓͷ൪߸Λ༻ͯ͠ޙํࢀরΛߦ͏͜ͱ͕Ͱ ͖·͢ɻ ͕͢͞ʹ͜Ε͘Β͍Ͱ͖ͳ͍ͱ͓͔͍͠Ͱ͢ΑͶɻ
2ίϝϯτߏจ Regex: /(?#͜ͷ෦ίϝϯτ)abc/x Input: "abc" Result: Match! ͜Ε ͲͪΒʁ A)
Perl B) PHP C) ྆ํ
͑$ ྆ํ ղઆ༧֎͔͠Ε·ͤΜ͕ɺ1FSMͱ1)1ͷ྆ํͰαϙʔτ͞Ε͍ͯ·͢ɻ 1FSMͷํ͕ΑΓॊೈͰ͕͢ɺ·͋ͦΜͳෳࡶͳίϝϯτͤΜΖɻͦΜͳෳࡶͳ ΒɺYϑϥά͔ͭͬͯͰίϝϯτͨ͠΄͏͕͍ٓ͠ɻ
2݅ذ Regex: m/(a)?b(?(1)c|d)/ Input: "abc" Result: Match! ͜Ε ͲͪΒʁ A)
Perl B) PHP
͑$ ྆ํ ղઆ͖݅Ϛονϯά1FSMͱ1)1ͷ྆ํͰαϙʔτ͞Ε͍ͯ·͢ɻ m/(a)?b(?(1)c|d)/ ͜ͷέʔεͩͱɺB ʹΩϟϓνϟάϧʔϓ Λ͔ͭͬͯD EͷϚον݅Λ੍ޚͯ͠ ͓ΓɺBCDɺ͋Δ͍CEʹϚον͠·͢ɻ ͕ɺ1)1FSଟͬͨ͜ͱ͕ແ͍ͱࢥ͍·͢ɻ
2ᩦཉϚονϯά Regex: m/a.*b/ Input: "a" + "x" * 1000000 +
"b" Result: ελοΫෆϝϞϦෆ ૣ͘Τϥʔʹͳͬͯ͠·͏ͷʁ A) Perl B) PHP C) ࠩͳ͍
͑# 1)1 ղઆجຊతʹ1FSMͱ1)1ͷ྆ํͰɺᩦཉϚονϯάେ͖ͳೖྗͰελοΫΦ ʔόʔϑϩʔϝϞϦ੍ݶա͕ൃੜ͢ΔՄೳੑ͕͋Γ·͢ɻ ͨͩ͠ɺ1)1ͷํ͕ૣ͘ΤϥʔʹͳΔͣͰ͢ɻ ͳͥͳΒΦʔόʔϑϩʔ͢ΔΑ͏ͳίʔυେ1)1FSͷϛεͳͷͰɺͬ͞͞ͱऴ ྃͯ͠ඃΛ࠷খݶʹ͠·͢ɻ
2όοΫτϥοΩϯά Regex: m/(a|aa|aaa|aaaa|aaaaa|aaaaaa)*/ Input: "aaaaa" ... (a͕݁ߏࢁ Result: ࣦഊ(Ϛονͤͣ) ͜Ε
ͲͪΒʁ A) ͲͪΒ͔ͱ͍͑Perl B) ͲͪΒ͔ͱ͍͑PHP
͑# ͲͪΒ͔ͱ͍͑1)1 ղઆ1)11)1FSΛ৴͍ͯ͡ͳ͍ͷͰɺ΄͔ͷϓϩηεʹ໎Λ͔͚ͳ͍Α͏ ʹɺͬ͞͞ͱ༏͘͠ڧ੍ऴྃ͠·͢ɻ όοΫτϥοΩϯάͷ੍ݶQIQJOJͰௐ͢Δ͜ͱͰ͖·͢ɻ # Α͘ղΒͳ͍͚Ͳ͜ΕΛͬͨΒͳ͓ͬͨɺফ͞ͳ͍Ͱ͍ͩ͘͞ ini_set('pcre.backtrack_limit', 99999999999); (*SKIP)(*FAIL)ͷςΫ͋Γ·͕͢ɺ1)1FS͍·ͤΜ
ʁʁʁ 1FSMόοΫτϥοΩϯά੍ݶ͕ͳ͘ɺݶք·Ͱ͕ΜΓ·͢ɻ ͭ·Γ1FSM1FSM.POHFSΛա৴͍ͯ͠ΔͷͰɺ͠͠NPE@QFSM͕མͪ·͢ ݹ
͍͔͕Ͱ͔ͨ͠ʁ w ΫΠζʹͰ͖Δఔʹɺࠩେ͖͘ͳ͍Ͱ͢ΑͶʁ w ͔͠͠ɺվߦΈ͍ͨʹ୯७ͳͰڍಈ͕ࠩ͋ΔͷͰؾΛ͚ͭͳ͖Ό͍͚·ͤΜ w 1FSM؆ܿʹॻ͚ͯύϫϑϧͰ͕͢ɺ͍֮͑ͯͳ͍ͱॻ͖ʹ͍͘ॴ͕͋Γ·͢ ͠ɺϛεΔͱ00.͠·͢ɻ w 1)1γϯϓϧͰෛՙʹϑΣΠϧηʔϑ͕͋Γ·͕͢ɺίʔυखଓ͖తͰ͢
͠ɺݶք·Ͱ͍͍ͨ࣌QIQJOJͷௐ͕ඞཁͰ͢ɻ w ͱ͍͑ࠜͬ͜ࣅ͍ͯΔͷͰɺ૬ޓͰཧղ͢Δͷ͘͠ͳ͍Ͱ͠ΐ͏ʂ ɹ͓ޓ͍͔֬Ίͳ͕Β͍͖ͬͯ·͠ΐ͏ʂ w ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ