$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
まだ正規表現で消耗してるの? / PHP Conference Fukuoka 2016
Search
Kenichiro Kishida
May 29, 2016
Technology
0
1.3k
まだ正規表現で消耗してるの? / PHP Conference Fukuoka 2016
PHPカンファレンス福岡2016のLTスライドです
Kenichiro Kishida
May 29, 2016
Tweet
Share
More Decks by Kenichiro Kishida
See All by Kenichiro Kishida
Compression Streams API によるブラウザネイティブなデータ圧縮/jsfes2025
sizuhiko
0
15
Compression Streams API によるブラウザネイティブなデータ圧縮 /phpstudy-182
sizuhiko
0
28
Code兄弟での CI/CDをいい感じにする方法 / phpstudy-2024-06
sizuhiko
0
200
Webアクセシビリティワークショップを社内でやってみた / phpconfuk-2024
sizuhiko
1
390
デベロッパーよ 健康でいるためには 寝て 旅をして 趣味を持って メンタル大切に / DE-RADIO-2023-06-26
sizuhiko
0
160
ヘビータブユーザーが ワークスペースの利用でどのように変わったか / 2023-05-16 Vivaldi User Meetup TOKYO 2023
sizuhiko
0
350
Node.js v18 ベースイメージを使った AWS Lambda アプリ開発におけつ光と影 / 2023-04-23 JavaScript Fes
sizuhiko
0
220
@swc-node/jest を使って テストを高速化する/jsfes-2022
sizuhiko
0
400
Rails 7の採用提案で注目を集め始めた Import maps の過去、現在、そして未来について/de radio 2
sizuhiko
2
1.5k
Other Decks in Technology
See All in Technology
「図面」から「法則」へ 〜メタ視点で読み解く現代のソフトウェアアーキテクチャ〜
scova0731
0
500
Microsoft Agent Frameworkの可観測性
tomokusaba
1
110
AWS運用を効率化する!AWS Organizationsを軸にした一元管理の実践/nikkei-tech-talk-202512
nikkei_engineer_recruiting
0
170
オープンソースKeycloakのMCP認可サーバの仕様の対応状況 / 20251219 OpenID BizDay #18 LT Keycloak
oidfj
0
180
Next.js 16の新機能 Cache Components について
sutetotanuki
0
190
Kiro を用いたペアプロのススメ
taikis
4
1.8k
AWSインフルエンサーへの道 / load of AWS Influencer
whisaiyo
0
220
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
410
AI駆動開発ライフサイクル(AI-DLC)の始め方
ryansbcho79
0
180
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
6
3.6k
Amazon Bedrock Knowledge Bases × メタデータ活用で実現する検証可能な RAG 設計
tomoaki25
6
2.4k
Entity Framework Core におけるIN句クエリ最適化について
htkym
0
120
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Being A Developer After 40
akosma
91
590k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
17
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
89
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The Spectacular Lies of Maps
axbom
PRO
1
400
Typedesign – Prime Four
hannesfritz
42
2.9k
エンジニアに許された特別な時間の終わり
watany
106
220k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
340
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
2
2.8k
Darren the Foodie - Storyboard
khoart
PRO
0
2k
Transcript
· ͩ ਖ਼ ن ද ݱ Ͱ ফ ͠
ͯ Δ ͷ ʁ Մ ಡ ੑ Λ ্ ͛ Δ ͱ ͏ · ͘ ͍ ͘ ͠ ͣ ͻ ͜ 1)1ΧϯϑΝϨϯεԬ ෳࡶͳਖ਼نදݱΛߟ͑Δͷ࣌ؒͷແବͩͬͨ ౦ ژ
,FOJDIJSP,JTIJEB 5PLZP +"1"/ TJ[VIJLP!HNBJMDPN !TJ[VIJLP IUUQTHJUIVCDPNTJ[VIJLP IUUQCMPHPQFOUPLZPKQ R: HmM^JRTIeUY
I — ਖ਼نදݱ
/(?:(?P<dayOfWeek>(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)|(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))? (?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)|(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?: [\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]| [\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n)) (?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))?(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+ (?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]| [\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n)) (?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+) +)))?)),)?(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:\d){1,2}(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)|(?:(?: (?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?
(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t]) +(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))? (?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))?(?:\d){1,2}(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?: \n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]| [\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?: [\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(?:(?:(?:(?:(?:[\x20\t]) +(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:\d)(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)|(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r \n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]| [\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?: [\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?: [\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))?(?:\d)(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?: [\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]| [\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?: \n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+) (?:(?:\d){2,2}|(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n)) (?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+ (?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+ (?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))?(?:\d){2,2}(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?: (?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0| (?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?: [\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))\:(?:(?:\d){2,2}|(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?: [\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93- \d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?: [\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?: \n)|(?:\r\n))(?:[\x20\t])+)+)))?(?:\d){2,2}(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?: [\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]| [\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n)) (?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))(?:\:(?:(?:\d){2,2}|(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n)) (?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]| [\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))? \)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))?(?:\d){2,2}(?:(?:(?:(?: (?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?: [\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?: (?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?: [\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))))?(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)(?:\+|\-)(?:\d){4,4}|(?:UT|GMT|EST|EDT|CST|CDT|MST| MDT|PST|PDT|[\d65-\d73]|[\d75-\d90]|[\d97-\d105]|[\d107-\d122]))(?:(?:(?:(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?P<comment>\((?:(?:(?:(?:(?:[\x20\t])+(?: (?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?(?:(?:[\d33-\d39]|[\d42-\d91]|[\d93-\d126]|(?:[\d1-\d8]|[\d11]|[\d12]|[\d14-\d31]|[\d127]))|(?:\\(?:[\x21-\x7E]|[\x20\t])|\\(?:\d0|(?:[\d1-\d8]| [\d11]|[\d12]|[\d14-\d31]|[\d127])|\n|\r))|(?P>comment)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?\)))+(?:(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?: [\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+))?|(?:(?:(?:[\x20\t])+(?:(?:\n)|(?:\r\n)))?(?:[\x20\t])+|(?:[\x20\t])+(?:(?:(?:\n)|(?:\r\n))(?:[\x20\t])+)+)))?$/
None
RFC5322 Internet Message Format Date and Time Specification
/^(?P<scheme>[a-zA-Z](?:[a-zA-Z0-9\+\-\.])*)\:(?P<hierPart>(?:\/\/(? P<authority>(?:(?P<userinfo>(?:(?:[a-zA-Z0-9\-\._~]|%(?:[0-9A-Z]){2}| [\!\$&'\(\)\*\+,;\=]|\:))*)@)?(?P<host>(?:(?:0-9|1-90-9|10-90-9|20-40-9| 250-5)\.(?:0-9|1-90-9|10-90-9|20-40-9|250-5)\.(?:0-9|1-90-9|10-90-9| 20-40-9|250-5)\.(?:0-9|1-90-9|10-90-9|20-40-9|250-5)|(?:(?:[a-zA- Z0-9\-\._~]|%(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\+,;\=]))+))(?:\:(?P<port>(?:\d) +))?)(?P<pathAbempty>(?:\/(?:(?:[a-zA-Z0-9\-\._~]|%(?:[0-9A-Z]){2}|[\! \$&'\(\)\*\+,;\=]|\:|@))*)*)|(?P<pathAbsolute>\/(?:(?:(?:[a-zA-Z0-9\- \._~]|%(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\+,;\=]|\:|@))+(?:\/(?:(?:[a-zA-Z0-9\- \._~]|%(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\+,;\=]|\:|@))*)+)?)|(?
P<pathRootless>(?:(?:[a-zA-Z0-9\-\._~]|%(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\ +,;\=]|\:|@))+(?:\/(?:(?:[a-zA-Z0-9\-\._~]|%(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\ +,;\=]|\:|@))*)*)|(?P<pathEmpty>^(?:[a-zA-Z0-9\-\._~]|%(?:[0-9A-Z]) {2}|[\!\$&'\(\)\*\+,;\=]|\:|@))))(?:\?(?P<query>(?:(?:(?:[a-zA-Z0-9\-\._~]| %(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\+,;\=]|\:|@)|\/|\?))*))?(?:#(?P<fragment>(?: (?:(?:[a-zA-Z0-9\-\._~]|%(?:[0-9A-Z]){2}|[\!\$&'\(\)\*\+,;\=]|\:|@)|\/| \?))*))?$/
RFC3986 Uniform Resource Identifier (URI): Generic Syntax
URI = scheme ":" hier-part [ "?" query ] [
"#" fragment ] scheme = ALPHA * ( ALPHA / DIGIT / "+" / "-" / "." ) hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty https://www.ietf.org/rfc/rfc3986.txt
wݕࡧͨ݁͠Ռɺग़͖ͯͨਖ਼نදݱΛί ϐϖͯ͠·ͤΜ͔ʁͦΕਖ਼͍͠Ͱ͔͢ʁ wଞͷਓ͕ॻ͍ͨਖ਼نදݱΛؚΉίʔυ ΛϨϏϡʔͰ͖·͔͢ʁ wޙͰͦͷਖ਼نදݱϝϯςͰ͖·͔͢ʁ
ͬͱ؆୯ʹ ॻ͖͍ͨPSಡΈ͍ͨ ͱࢥͬͨ͜ͱͳ͍Ͱ͔͢ʁ
None
Regular Expressions made easy
$regex = new VerbalExpressions; $regex->startOfLine() ->then("http") ->maybe("s") ->then("://") ->maybe("www.") ->anythingBut("
") ->endOfLine(); /^(?:http)(?:s)?(?:\:\/\/)(?:www\.)?(?:[^ ]*)$/m
$rfc3986 = new VerbalExpressions; // scheme $scheme = new VerbalExpressions;
$scheme->add("http")->maybe("s") ->_or("ftp"); $rfc3986->startOfLine() ->add($scheme) ->add("://"); /^(?:\(\?\:http\)\(\?\:s\)\?\)\|\(\?\:ftp)(?:\:\/\/)/m
w⾭ଟ͘ͷݴޠʹରԠ͍ͯ͠Δ w⾭؆୯ʹॻ͚Δ w⾪ෳࡶͳέʔεॻ͚ͳ͍ w⾪ݴޠʹΑ࣮͕ͬͯϚνϚν
None
None
None
http://www.kurtisrainboltgreene.name/hexpress/
The hexpress gem is another take at the concept of
"Verbal Hexpressions" in Ruby.
pattern = Hexpress.new. start("http"). maybe("s"). with("://"). maybe { words.with(".") }.
find { matching { [word, "-"] }.multiple }. has("."). either("com", "org"). maybe("/"). ending
ϫλγϋϧϏʔνϣοτ
To PHP https://github.com/sizuhiko/hexpress
trait Find { public function find($value = null, $named =
false) { $param = compact('value', 'named'); return is_callable($value) ? $this->addNested(FindValue::class, $param) : $this->addValue(FindValue::class, $param); } public function capture($value = null) { return $this->find($value); } } class FindValue { use Nested; private $hexpression; private $open; private $close; public function __construct($param) { extract($param); $this->hexpression = is_callable($value) ? new Hexpress($value) : $value; $this->open = $named ? "(?P<{$named}>" : '('; $this->close = ')'; } } class Hexpress def find(value = nil, &block) value ? add_value(Nested::Find, value) : add_nested(Nested::Find, &block) end alias_method :capture, :find module Nested class Find include Nested def initialize(value=nil,&block) @hexpression = value || Hexpress.new.instance_eval(&block) @open, @close = "(", ")" end end end end ࠷ۙͷ1)1ͳΒ͔ͳΓ࣮ʹҠ২Մೳ
URI = scheme ":" hier-part [ "?" query ] [
"#" fragment ] scheme = ALPHA * ( ALPHA / DIGIT / "+" / "-" / "." ) hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty https://www.ietf.org/rfc/rfc3986.txt
$this->hexpress ->start($this->scheme()) ->with(':') ->has($this->hierPart()) ->maybe($this->query()) ->maybe($this->fragment()) ->end(); URI = scheme
":" hier-part [ "?" query ] [ "#" fragment ]
private function scheme() { return (new Hexpress()) ->find(function ($hex) {
$hex->matching(function ($hex) { $hex->letter(); }); $hex->many(function ($hex) { $hex->matching(function ($hex) { $hex->letter()->number()->with('+-.'); }); }, 0); }, 'scheme'); } scheme = ALPHA * ( ALPHA / DIGIT / "+" / "-" / "." ) ̍ ̍
1)1൛ͷಠࣗػೳ ໊લ͖αϒύλʔϯ
private function scheme() { return (new Hexpress()) ->find(function ($hex) {
$hex->matching(function ($hex) { $hex->letter(); }); $hex->many(function ($hex) { $hex->matching(function ($hex) { $hex->letter()->number()->with('+-.'); }); }, 0); }, 'scheme'); } scheme = ALPHA * ( ALPHA / DIGIT / "+" / "-" / "." ) pOEϝιουͷୈೋҾʹ αϒύλʔϯͷ໊લΛࢦఆͰ͖Δ
preg_match( 'http://example.com:80/', $pattern->toRegExp(), $matches); echo $matches['scheme']; #=> 'http'
w͏ਖ਼نදݱͳΜ͔Ͱফ͠ͳ͍ʂ w3VCZͷΤίγεςϜ͔ΒͷҠ২༰қ ʹͳ͍ͬͯΔʂʂ wఘΊͳ͍Ͱʂʂʂ
WJTJUNZCMPHHJUIVC https://github.com/sizuhiko http://blog.open.tokyo.jp R: HmM^JRTIeUY @sizuhiko #phpstudy 2016/3/30