Submit Search
Upload
はじめての正規表現(一般公開版)
•
5 likes
•
1,891 views
suwork
Follow
会社の研修で使った正規表現のテキストです。正規表現ってなに?使ったことない!という方にオススメです。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 61
Recommended
SEMAT Initiative - Essence Introduction
SEMAT Initiative - Essence Introduction
Marvin Ferreira
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
Hironori Washizaki
QGISセミナー初級・基礎編(V2.4)
QGISセミナー初級・基礎編(V2.4)
IWASAKI NOBUSUKE
Yalın Yönetim Merkezi'nin Yalın Yönetim-Yalın Üretim Eğitim Kataloğu
Yalın Yönetim Merkezi'nin Yalın Yönetim-Yalın Üretim Eğitim Kataloğu
Gökhan Çelikliay
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
Djangoのセキュリティとその実装
Djangoのセキュリティとその実装
aki33524
良いコードとは
良いコードとは
Nobuyuki Matsui
Learning to Rank in Solr: Presented by Michael Nilsson & Diego Ceccarelli, Bl...
Learning to Rank in Solr: Presented by Michael Nilsson & Diego Ceccarelli, Bl...
Lucidworks
Recommended
SEMAT Initiative - Essence Introduction
SEMAT Initiative - Essence Introduction
Marvin Ferreira
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
Hironori Washizaki
QGISセミナー初級・基礎編(V2.4)
QGISセミナー初級・基礎編(V2.4)
IWASAKI NOBUSUKE
Yalın Yönetim Merkezi'nin Yalın Yönetim-Yalın Üretim Eğitim Kataloğu
Yalın Yönetim Merkezi'nin Yalın Yönetim-Yalın Üretim Eğitim Kataloğu
Gökhan Çelikliay
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
Koichiro Matsuoka
Djangoのセキュリティとその実装
Djangoのセキュリティとその実装
aki33524
良いコードとは
良いコードとは
Nobuyuki Matsui
Learning to Rank in Solr: Presented by Michael Nilsson & Diego Ceccarelli, Bl...
Learning to Rank in Solr: Presented by Michael Nilsson & Diego Ceccarelli, Bl...
Lucidworks
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
SFDG ROOKIES
「Redmine」、「Trac」から「Atlassian JIRA」への移行紹介
「Redmine」、「Trac」から「Atlassian JIRA」への移行紹介
ricksoftKK
Big Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best Practices
Amazon Web Services
Efficient Data Formats for Analytics with Parquet and Arrow
Efficient Data Formats for Analytics with Parquet and Arrow
DataWorks Summit/Hadoop Summit
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
Construindo a NuConta
Construindo a NuConta
Nubank
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
Değer akışı haritalama, value stream mapping
Değer akışı haritalama, value stream mapping
TUBITAK
営業チームの案件管理をConfluenceでやってみた
営業チームの案件管理をConfluenceでやってみた
Kinzen Nanbara
Designing data intensive applications
Designing data intensive applications
Hemchander Sannidhanam
BigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL Dialect
Ken Morishita
クラウド時代のデータストア選択"秘伝の書"
クラウド時代のデータストア選択"秘伝の書"
Hiromasa Oka
アジャイル開発やってみた
アジャイル開発やってみた
Arata Fujimura
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case study
Kishore Gopalakrishna
明治大学理工学部 特別講義 AI on Azure
明治大学理工学部 特別講義 AI on Azure
Daiyu Hatakeyama
『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜
『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜
DeNA
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
DevOps.com
Kafka Retry and DLQ
Kafka Retry and DLQ
George Teo
Big Data Architectural Patterns
Big Data Architectural Patterns
Amazon Web Services
楽天技術研究所の次世代AI 技術への挑戦
楽天技術研究所の次世代AI 技術への挑戦
Rakuten Group, Inc.
Topic12 optical fiber
Topic12 optical fiber
eltsovcsseftkspbspuru
Topic14 lan
Topic14 lan
eltsovcsseftkspbspuru
More Related Content
What's hot
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
SFDG ROOKIES
「Redmine」、「Trac」から「Atlassian JIRA」への移行紹介
「Redmine」、「Trac」から「Atlassian JIRA」への移行紹介
ricksoftKK
Big Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best Practices
Amazon Web Services
Efficient Data Formats for Analytics with Parquet and Arrow
Efficient Data Formats for Analytics with Parquet and Arrow
DataWorks Summit/Hadoop Summit
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
増田 亨
Construindo a NuConta
Construindo a NuConta
Nubank
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
増田 亨
Değer akışı haritalama, value stream mapping
Değer akışı haritalama, value stream mapping
TUBITAK
営業チームの案件管理をConfluenceでやってみた
営業チームの案件管理をConfluenceでやってみた
Kinzen Nanbara
Designing data intensive applications
Designing data intensive applications
Hemchander Sannidhanam
BigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL Dialect
Ken Morishita
クラウド時代のデータストア選択"秘伝の書"
クラウド時代のデータストア選択"秘伝の書"
Hiromasa Oka
アジャイル開発やってみた
アジャイル開発やってみた
Arata Fujimura
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case study
Kishore Gopalakrishna
明治大学理工学部 特別講義 AI on Azure
明治大学理工学部 特別講義 AI on Azure
Daiyu Hatakeyama
『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜
『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜
DeNA
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
DevOps.com
Kafka Retry and DLQ
Kafka Retry and DLQ
George Teo
Big Data Architectural Patterns
Big Data Architectural Patterns
Amazon Web Services
楽天技術研究所の次世代AI 技術への挑戦
楽天技術研究所の次世代AI 技術への挑戦
Rakuten Group, Inc.
What's hot
(20)
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
「Redmine」、「Trac」から「Atlassian JIRA」への移行紹介
「Redmine」、「Trac」から「Atlassian JIRA」への移行紹介
Big Data Architectural Patterns and Best Practices
Big Data Architectural Patterns and Best Practices
Efficient Data Formats for Analytics with Parquet and Arrow
Efficient Data Formats for Analytics with Parquet and Arrow
ドメイン駆動設計の学習曲線とブレークポイント
ドメイン駆動設計の学習曲線とブレークポイント
Construindo a NuConta
Construindo a NuConta
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
Değer akışı haritalama, value stream mapping
Değer akışı haritalama, value stream mapping
営業チームの案件管理をConfluenceでやってみた
営業チームの案件管理をConfluenceでやってみた
Designing data intensive applications
Designing data intensive applications
BigQuery勉強会 Standard SQL Dialect
BigQuery勉強会 Standard SQL Dialect
クラウド時代のデータストア選択"秘伝の書"
クラウド時代のデータストア選択"秘伝の書"
アジャイル開発やってみた
アジャイル開発やってみた
Building real time analytics applications using pinot : A LinkedIn case study
Building real time analytics applications using pinot : A LinkedIn case study
明治大学理工学部 特別講義 AI on Azure
明治大学理工学部 特別講義 AI on Azure
『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜
『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Discover How Volvo Cars Uses a Time Series Database to Become Data-Driven
Kafka Retry and DLQ
Kafka Retry and DLQ
Big Data Architectural Patterns
Big Data Architectural Patterns
楽天技術研究所の次世代AI 技術への挑戦
楽天技術研究所の次世代AI 技術への挑戦
Viewers also liked
Topic12 optical fiber
Topic12 optical fiber
eltsovcsseftkspbspuru
Topic14 lan
Topic14 lan
eltsovcsseftkspbspuru
Topic17 frame relay
Topic17 frame relay
eltsovcsseftkspbspuru
Topic10 coaxial
Topic10 coaxial
eltsovcsseftkspbspuru
AIS Program Brochure with Samples
AIS Program Brochure with Samples
Nolan Teng
Бизнес-планирование (часть 1 Резюме)
Бизнес-планирование (часть 1 Резюме)
Софья Митрошина
Крашенинникова О.В. кейс "Анализ данных"
Крашенинникова О.В. кейс "Анализ данных"
Ольга Крашенинникова
Durban Port Operators Awarded
Durban Port Operators Awarded
Marketing Durban Chamber
Сводка поступивших предложений по уведомлению о начале разработки законопроек...
Сводка поступивших предложений по уведомлению о начале разработки законопроек...
Artem Kozlyuk
медиа проект
медиа проект
Ольга Крашенинникова
Cómo generar y gestionar cultura investigativa en el proceso docente
Cómo generar y gestionar cultura investigativa en el proceso docente
Vladimir Estrada
бумажная пластика зоря
бумажная пластика зоря
Елена Исакова
говорова бумажная пластика
говорова бумажная пластика
Елена Исакова
па лит. 8 класс
па лит. 8 класс
Елена Исакова
Ekz
Ekz
Елена Исакова
Ley de inmigración y colonización n°817
Ley de inmigración y colonización n°817
El Arcón de Clio
Viewers also liked
(16)
Topic12 optical fiber
Topic12 optical fiber
Topic14 lan
Topic14 lan
Topic17 frame relay
Topic17 frame relay
Topic10 coaxial
Topic10 coaxial
AIS Program Brochure with Samples
AIS Program Brochure with Samples
Бизнес-планирование (часть 1 Резюме)
Бизнес-планирование (часть 1 Резюме)
Крашенинникова О.В. кейс "Анализ данных"
Крашенинникова О.В. кейс "Анализ данных"
Durban Port Operators Awarded
Durban Port Operators Awarded
Сводка поступивших предложений по уведомлению о начале разработки законопроек...
Сводка поступивших предложений по уведомлению о начале разработки законопроек...
медиа проект
медиа проект
Cómo generar y gestionar cultura investigativa en el proceso docente
Cómo generar y gestionar cultura investigativa en el proceso docente
бумажная пластика зоря
бумажная пластика зоря
говорова бумажная пластика
говорова бумажная пластика
па лит. 8 класс
па лит. 8 класс
Ekz
Ekz
Ley de inmigración y colonización n°817
Ley de inmigración y colonización n°817
Recently uploaded
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Recently uploaded
(10)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
はじめての正規表現(一般公開版)
1.
はじめての正規表現 ∼仕事を楽しくするエッセンシャル∼ author:@suwork 1
2.
本テキストの対象者 • 正規表現ってなに?とのピュアな人 • テキストエディタで検索ウィンドウを開いたと きに「正規表現」にチェックが入っていない人 •
サクラエディタ、秀丸エディタなどのWindows のテキストエディタを扱う人(※) ※テキスト内でWindowsに対応したテキストエディタを用います (正規表現とWindowsは関係ありません) 2
3.
テキストに入る前に…… • 本テキストはWindows7マシン+iCloud keynote(beta) で作成しています •
テンプレートは「Azusa Colors」を利用しています。あ りがとうございます(http://memo.sanographix.net/ post/113681262780) • 本テキストが完成する30分前に、iCloudが変な同期を 行い、keyファイルが壊れました(復元不可)。……こ れは思い出して書き直したのだよ 3
4.
正規表現ってなに? • 正規表現は、強力で柔軟、かつ効率的なテキ スト処理の を握る存在だ。 4 •
さまざまな用途に対応できる能 力と表現力を持った一般的なパ ターン言語が発達してきた。 (略)このパターン言語とパ ターン自体を正規表現と呼ぶ。 オライリー・ジャパン 詳説 正規表現 第3版 より抜粋
5.
結局、正規表現ってなに? • かの偉い人は言いました 5 • ……若干意味を取り違えている気がします が、手を動かして試していきましょう プログラマーの格言34(盗作多し) 目で追う暇があるなら動かせ。脳細胞よりもCPUの ほうが解析が速い。そして、その間、休める。 出典:プログラマーの格言(盗作多し)(http://www2.biglobe.ne.jp/oni_page/other/etc/pr03.html)より
6.
このテキストに必要なもの テキストエディタ 6 みんな大好きサクラエディタでいいよ! #僕は秀丸を使うね!
7.
テキストエディタの設定 • 検索ウィンドウの正規表現にチェックを入れ るべし 7
8.
正規表現ってなに? Part2 • こんなことがありました 8 上司「郵便番号と住所を一つの項目で管理しているウェブシステムが、 今度のシステム開発で郵便番号と住所を別項目で管理するようになるん だよね。それで住所項目から郵便番号を導出して移行する必要があるん だけど、現状の住所項目の登録内容を見ると郵便番号が入っていたり、 入っているけど書式が正しくなかったりしていて、どれくらい工数が必要 か検討がつかないんだよね。80万行くらいのCSVファイルなんだけど、 ざっくりでいいから郵便番号がちゃんと設定されていないレコード数を 教えてくれる?完璧な結果は必要はないけど、精度が高いと嬉しい。CSV ファイルはサーバに圧縮して置いてあるから。なるべく早めに欲しいな あ(意訳:早くよこせ)」 僕「アッハイ」
9.
正規表現ってなに? Part2 • 長い、長いけどひとまず整理をすると…… 1. 80万行くらいのCSVファイルの 2.
住所項目に郵便番号が設定されていないレ コードを探す 3. 精度は高いほうが良い 4. 早めに欲しい 9
10.
正規表現ってなに? Part2 • データサンプルは以下のとおり 10 名前,取扱支店,発注回数,住所,電話番号,カラムN S名N子,近畿支店,21,530-0001 大阪府 ●●…,999-0412-0109,新作ドーナッツ の試食 I十嵐K子,中国支店,59,680-0001 鳥取県 ●●…,999-0906-0056,家事全般 Y口M羽,関東支店,14,千葉県 ▲▲…,999-0514-0033,メール Jヶ崎M嘉,関東支店,43,330-0002 埼玉県 ▲▲…,999-0144-0206,カラオケ M方A海,東北支店,37,030-001 青森県 ●●…,999-0858-0559,指の運動 F居T,近畿支店,64,滋賀県 ■■…,999-0834-0566,占い O石I,中部支店,60,410-0001 静岡県 ■■…,999-0635-0758,プログラミング M川Mく,近畿支店,88,530-0002 大阪府 ●●…,999-0062-0464,猫カフェ巡り T時A梨,東北支店,84,010-00001 秋田県 ▲▲…,999-0135-0619,ケーキ作り H口Aやめ,近畿支店,15,三重県 ▲▲…,999-0006-0878,時代劇鑑賞、忍者グッズ収 集、撮影所巡り
11.
正規表現ってなに? Part2 • さあ、こんな時はどうやって探そう? 11 1. CSVならExcelが得意!Excelに貼り付けてどうにかしよ う →
80万行のファイルを!やりたくない 2. 簡単なスクリプトでも作るか…… → 精度を求めているので、バグは厳禁(自信があるならどうぞ) 3. 俺の目に任せろ(目視で件数を数える) → その根性は別のタイミングにとっておいて下さい
12.
正規表現ってなに? Part2 • 冷静になってレコードを見てみると、法則が あります 12 1. CSV(カンマ区切り)との法則 2.
郵便番号(3桁数字+ハイフン+4桁数 字)との法則 • このようにある程度の法則がある場合、「正規表 現」が有用です
13.
正規表現ってなに? Part2 • 以下の文字列を設定して検索してみよう 13 (?<=^([^,]*,){3})(?! d{3}-d{4}[^d]) ※「」は「¥」の半角
14.
正規表現ってなに? Part2 • すごい、それっぽいレコードが取得できた!(スマン、秀丸だけの方言が 入ってるかも知れない) 14 そもそも郵便番号を入力していないレコード 入力しているが書式を誤っているレコード
15.
正規表現ってなに? Part2 15 これはスゴイ(大 豆ではない) ※スゴイダイズは大塚チルド食品株式会社の製品です
16.
正規表現ってなに? Part2 • スゴイだけで終わってはいけません。検索に 使った文字列の意味は……? 16 (?<=^([^,]*,){3})(?!d{3}-d{4}[^d]) 郵便番号の書式が存在し ないことを表現 先頭から3番目のカンマ 区切りの位置取りを表現 + =先頭から3番目のカンマ区切りの後ろに、郵便番号が 存在しないレコードを検索対象とする、としているのだ
17.
正規表現ってなに? Part2 • 「としているのだ」と宣言されても、複雑怪 奇な文字列でなぜ検索できるのだろう? • この複雑怪奇な文字列の塊がまさに「正規 表現」なのである 17
18.
正規表現ってなに? Part2 • 黄色文字は位置であったり、文字であったり、その繰り返し等を定 義したりする文字 「メタ文字」と呼びます • 紫色文字は文字そのもの 「リテラル文字」と呼びます •
正規表現は、メタ文字とリテラル文字の組み合わせで強力な文 字列パターンを表現することが可能 18 (?<=^([^,]*,){3})(?!d{3}-d{4}[^d])
19.
正規表現ってなに? Part2 • 正規表現はメタ文字の使いっぷりですべてが 決まります(良くも悪くも) • むしろメタ文字を制するもの正規表現を制す と言って過言ではない。メタ文字の仕様(役 割)を理解しよう •
次のページから基本的な正規表現を学んでい きましょう! 19
20.
位置を表現:^(ハット記号) • 文字列にはマッチせず、文字列の先頭を表現 する特殊なメタ文字です • ハット記号単体で先頭に文字を挿入したい場 合やリテラル文字と組み合わせて、先頭文字 に対してxxしたいなどの時によく使います 20 ※正式名称
21.
位置を表現:^(ハット記号) • 先頭に文字を入力してコマンドを作る 21 WS000017.JPG WS000016.JPG WS000015.JPG WS000014.JPG … del WS000017.JPG del
WS000016.JPG del WS000015.JPG del WS000014.JPG … 検索 ^ 置換 del△
22.
位置を表現:^(ハット記号) • 特定のレコードから始まる行だけを消す 22 属性,名前,取扱支店,... cu,S名N子,近畿支店,... cu,I十嵐K子,中国支店,... cu,Jヶ崎M嘉,関東支店,... co,M方A海,東北支店,... co,F居T,近畿支店,... co,O石I,中部支店,... pa,M川Mく,近畿支店,... pa,T時A梨,東北支店,... pa,H口Aやめ,近畿支店,... 検索 ^cu.+n 置換 属性,名前,取扱支店,... co,M方A海,東北支店,... co,F居T,近畿支店,... co,O石I,中部支店,... pa,M川Mく,近畿支店,... pa,T時A梨,東北支店,... pa,H口Aやめ,近畿支店,...
23.
位置を表現:$(ドル記号) • 文字列にはマッチせず、文字列の末尾を表現 する特殊なメタ文字です • ハット記号は先頭ですが、ドル記号は末尾を 表します。ドル記号単体で末尾に何か文字を 入れたり、リテラル文字と組み合わせて末尾 の文字列を特定したりすることが可能です 23
24.
位置を表現:$(ドル記号) • (こんな使い方はしないと思いますが)末尾に文字列を追加する 24 ブラックニッカスペシャル ブラックニッカ 8年 ブラックニッカ クリア フロム・ザ・バレル スーパーニッカ 鶴 17年 オールモルト 検索 $ 置換
を購入する ブラックニッカスペシャルを購入する ブラックニッカ 8年を購入する ブラックニッカ クリアを購入する フロム・ザ・バレルを購入する スーパーニッカを購入する 鶴 17年を購入する オールモルトを購入する
25.
位置を表現:$(ドル記号) • 末尾の更新年月だけを消す(作成月は残す) 25 カラム,作成月,更新月 あああ,2015-01,2015-01 いいい,2015-01,2015-01 ううう,2014-12,2015-01 えええ,2014-11,2015-01 おおお,2014-06,2015-01 検索 ,2015-01$ 置換 カラム,作成月,更新月 あああ,2015-01 いいい,2015-01 ううう,2014-12 えええ,2014-11 おおお,2014-06
26.
位置を表現:^ $ • ハット記号とドル記号は組み合わせで絶大な パワーを発揮します。例えばファイル名が 「suwork」であること正規表現で調べようと すると…… 26 検索文字 判定結果
理由 suwork sssuworkkkで検索できてしまう ^suwork suworkkkで検索できてしまう suwork$ sssuworkで検索できてしまう ^suwork$ ○ 先頭がsでuworと続き、末尾がkであ ることを保証
27.
単一の文字とマッチ:.(ドット) • ドット記号は何かの文字にマッチするメタ文 字です • 後述する量指定子と組み合わせることで、 マッチの幅が広がります 27
28.
単一の文字とマッチ:.(ドット) • 誕生日が10日以降の値を特定する 28 住所,電話番号,誕生日 大阪,999-0412-0109,10月10日 鳥取,999-0906-0056,8月10日 青森,999-0858-0559,8月1日 大阪,999-0062-0464,2月22日 滋賀,999-0834-0566,7月1日 秋田,999-0135-0619,12月8日 検索 月..日$ 住所,電話番号,誕生日 大阪,999-0412-0109,10月10日 鳥取,999-0906-0056,8月10日 青森,999-0858-0559,8月1日 大阪,999-0062-0464,2月22日 滋賀,999-0834-0566,7月1日 秋田,999-0135-0619,12月8日
29.
文字クラス:[](ブラケット) • ブラケットは[]の中に含めた文字のいずれかと一致す るメタ文字です • ハイフン(-)を使うことで文字の範囲を表現すること が可能です 29 検索文字
マッチする文字 [a-z] abcdefghijklmnopqrstuvwxyz のいずれか [A-Z] ABCDEFGHIJKLMNOPQRSTUVWXYZ のいずれか [0-9] 0123456789 のいずれか [a-zA-Z0-9] abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 のいずれか
30.
文字クラス:[](ブラケット) • htmlドキュメント内の<h>(Heading)ダグを特定する 30 <h1>ヘッダ1</h1> <div> <h2>ヘッダ2</h2> <div> <h3>ヘッダ3</h3> <h4>ヘッダ4</h4> <h5>ヘッダ5</h5> </div> </div> 検索 <h[123456]> <h1>ヘッダ1</h1> <div> <h2>ヘッダ2</h2> <div> <h3>ヘッダ3</h3> <h4>ヘッダ4</h4> <h5>ヘッダ5</h5> </div> </div>
31.
文字クラス:[](ブラケット) • htmlドキュメント内の<h>(Heading)ダグを特定する2 31 <h1>ヘッダ1</h1> <div> <h2>ヘッダ2</h2> <div> <h3>ヘッダ3</h3> <h4>ヘッダ4</h4> <h5>ヘッダ5</h5> </div> </div> 検索 <h[1-6]> <h1>ヘッダ1</h1> <div> <h2>ヘッダ2</h2> <div> <h3>ヘッダ3</h3> <h4>ヘッダ4</h4> <h5>ヘッダ5</h5> </div> </div>
32.
2015/30/10 2015/08/01 2015/02/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/01/13 文字クラス:[](ブラケット) • 日付書式をなるべく厳格に特定する 32 2015/30/10 2015/08/01 2015/02/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/01/13 検索 [0-9][0-9][0-9][0-9]/[01][0-9]/[0-3][0-9]
33.
文字クラス:[^](否定のブラケット) • 否定のブラケットは[^]の中に含めた文字のいず れかと一致しない文字を表現するメタ文字です • 否定を意味する「^」は必ず先頭に記述する必 要があります(2文字以降に記述した場合、通 常の文字クラスになります) •
ハイフン(-)を使うことで文字の範囲を表現す ることが可能です(ブラケットと同じ) 33
34.
文字クラス:[^](否定のブラケット) • 先頭が数字でない行を特定する 34 02:37:34.940 [main]
(Pleiades) Pleiad 02:37:34.940 [main] (Pleiades) Eclips 02:37:35.247 [main] (PropertySet) sto org.osgi.framework.BundleException: バ at org.eclipse.osgi.framework. at org.eclipse.osgi.framework. 02:37:35.248 [main] (LauncherTransfor 02:37:34.940 [main] (Pleiades) Pleiad 02:37:34.940 [main] (Pleiades) Eclips 02:37:35.247 [main] (PropertySet) sto org.osgi.framework.BundleException: バ at org.eclipse.osgi.framework. at org.eclipse.osgi.framework. 02:37:35.248 [main] (LauncherTransfor 検索 ^[^0-9]
35.
2015/30/10 2015/08/01 2015/02/22 2015/19/01 2015/08/40 ^ 2015/47/10 文字クラス:[^](否定のブラケット) • 「^」は必ず先頭に記述すること 35 2015/30/10 2015/08/01 2015/02/22 2015/19/01 2015/08/40 ^ 2015/47/10 検索 [0-9^]
36.
エスケープ文字 • 特殊な文字を表現するエスケープ文字があります 36 メタ文字 意味 .
ドットそのもの。量指定子(後述)が存在するため r キャリッジリターン(CR)。Mac OSの改行コード n ラインフィード(LF)。UNIXの改行コード rn CR+LF。Windowsの改行コード(rとnを組み合わせただけ) t タブ文字 d [0-9] D [^0-9] s 空白、タブ文字、改行 S 空白、タブ文字、改行以外 i [A-Za-z_] c [A-Za-z_0-9]
37.
エスケープ文字 37 2015/30/10 2015/08/01 2015/02/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/01/13 • 日付書式をなるべく厳格に特定する2 2015/30/10 2015/08/01 2015/02/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/01/13 検索 dddd/[01]d/[0-3]d
38.
量指定子 • 付加することで文字に対して「反復機能」を得ることが可能です 38 量指定子 意味 ? ひとつ前の文字の存在を1回のみ許容する →
任意の1個(0または1) * ひとつ前の文字の存在を0回以上、無限に許容する → 任意の0個以上(無限) + ひとつ前の文字の存在を1回以上、無限に許容する → 任意の1個以上(無限) {N}、{f,t} 数字一つを指定した場合、一つ文字の存在をN回のみ許容す る ひとつ前の文字の存在をf回以上、t回まで許容する →任意のf個以上(t個まで)
39.
量指定子:?(疑問符) • 存在が不定な文字を考慮したマッチング(某DBのツールは、 行が選択できない場合、selectedの後ろに「.」が付かない) 39 21 rows
selected. no rows selected 37 rows selected. no rows selected 64 rows selected. 60 rows selected. 15 rows selected. 21 rows selected. no rows selected 37 rows selected. no rows selected 64 rows selected. 60 rows selected. 15 rows selected. 検索 selected.?$
40.
名前,取扱支店,... S名N子,近畿支店,... Jヶ崎M嘉,関東支店,... M方A海,東北支店,... O石I,中部支店,... M川Mく,近畿支店,... T時A梨,東北支店,... H口Aやめ,近畿支店,... 量指定子:*(アスタリスク) • CSV形式で先頭カラムを削除する(カラムに値 が設定されているとは限らない) 40 属性,名前,取扱支店,... cu,S名N子,近畿支店,... ,Jヶ崎M嘉,関東支店,... co,M方A海,東北支店,... co,O石I,中部支店,... ,M川Mく,近畿支店,... ,T時A梨,東北支店,... pa,H口Aやめ,近畿支店,... 検索 ^[^,]*, 置換
41.
量指定子:+(プラス記号) • なにかしらかの値が必ず設定されている行を特定する 41 属性,名前,取扱支店,... ! cu,Jヶ崎M嘉,関東支店,... ! co,O石I,中部支店,... pa,M川Mく,近畿支店,... ! pa,H口Aやめ,近畿支店,... 属性,名前,取扱支店,... ! cu,Jヶ崎M嘉,関東支店,... ! co,O石I,中部支店,... pa,M川Mく,近畿支店,... ! pa,H口Aやめ,近畿支店,... 検索 ^.+$
42.
量指定子:{N} 42 2015/30/10 2015/08/01 2015/2/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/1/13 • 日付書式をなるべく厳格に特定する3 2015/30/10 2015/08/01 2015/2/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/1/13 検索 d{4}/[01]?d/[0-3]?d$
43.
量指定子:{f,t} 43 2015/30/10 2015/08/01 2015/2/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/1/13 • 日付書式を特定する4(厳格ではない) 2015/30/10 2015/08/01 2015/2/22 2015/19/01 2015/08/40 2015/11/11 2015/47/10 2015/11/12 2015/12/32 2015/1/13 検索 d{4}/d{1,2}/d{1,2}$
44.
または:|(パイプ) • パイプ記号はパイプ前後の文字列にマッチし ます • プログラムのORと同じような動きと考えて問 題ありません •
パイプ記号はメモリが許す限りいくらでも連 結できます ああああ|いいいい|うううう|ええええ 44
45.
名前,星座 S名N子,天 座 I十嵐K子,獅子座 M方A海,獅子座 M川Mく,魚座 F居T,蟹座 O石I,蠍座 Y口M羽,蟹座 Jヶ崎M嘉,蠍座 T時A梨,射手座 H口Aやめ,山羊座 または:|(パイプ) 45 • 海のいきものの星座を持つ行を特定する 名前,星座 S名N子,天
座 I十嵐K子,獅子座 M方A海,獅子座 M川Mく,魚座 F居T,蟹座 O石I,蠍座 Y口M羽,蟹座 Jヶ崎M嘉,蠍座 T時A梨,射手座 H口Aやめ,山羊座 検索 魚座¦蟹座
46.
グルーピング:()(カッコ) • カッコでメタ文字、リテラル文字をくくるこ とによりグループ化が可能です • 量指定子、パイプ記号などと組み合わせるこ とで、より複雑なパターンをつくることが可 能です 46
47.
名前,星座 S名N子,天 座 I十嵐K子,獅子座 M方A海,獅子座 ! ! O石I,蠍座 ! Jヶ崎M嘉,蠍座 T時A梨,射手座 H口Aやめ,山羊座 グルーピング:()(カッコ) 47 • 海のいきものの星座を持つ行を削除する 名前,星座 S名N子,天
座 I十嵐K子,獅子座 M方A海,獅子座 M川Mく,魚座 F居T,蟹座 O石I,蠍座 Y口M羽,蟹座 Jヶ崎M嘉,蠍座 T時A梨,射手座 H口Aやめ,山羊座 検索 ^[^,]*,(魚座¦蟹座)$ 置換
48.
名前,星座 ! ! ! M川Mく,魚座 F居T,蟹座 ! Y口M羽,蟹座 ! ! グルーピング:()(カッコ) 48 • 海のいきものの星座を持たない行を削除する(書いてから思った、これ否定のブラケット でした) 名前,星座 S名N子,天 座 I十嵐K子,獅子座 M方A海,獅子座 M川Mく,魚座 F居T,蟹座 O石I,蠍座 Y口M羽,蟹座 Jヶ崎M嘉,蠍座 T時A梨,射手座 H口Aやめ,山羊座 検索
^[^,]*,[^魚蟹星]+座$ 置換
49.
キャプチャと後方参照:()、n • グルーピングした文字列をそれ以降で参照(後方参 照)することが出来ます。この場合、グルーピング の事をキャプチャと呼んだりします • 後方参照する場合に使用するメタ文字は 1、2、3、.....、n のようにキャプチャ番号(カッコの順番)+数 字で参照します •
また、0は特殊な後方参照で、マッチしたものすべ てを表現します 49
50.
キャプチャと後方参照:()、n 50 • 名前、取扱支店、発注回数、住所の順番を発 注回数、取扱支店、住所、名前に入れ替える 名前,取扱支店,発注回数,住所 S名N子,近畿支店,21,530-0001 大阪府 ●●… I十嵐K子,中国支店,59,680-0001 鳥取県 ●●… Y口M羽,関東支店,14,千葉県 ▲▲… Jヶ崎M嘉,関東支店,43,330-0002 埼玉県 ▲▲… M方A海,東北支店,37,030-001 青森県 ●●… F居T,近畿支店,64,滋賀県 ■■… O石I,中部支店,60,410-0001 静岡県 ■■… M川Mく,近畿支店,88,530-0002 大阪府 ●●… T時A梨,東北支店,84,010-00001 秋田県 ▲▲… H口Aやめ,近畿支店,15,三重県 ▲▲… 【置換前】
51.
キャプチャと後方参照:()、n 51 検索 ^([^,]+),([^,]+),([^,]+),([^,n]+)$ 置換 3,2,4,1 1
2 3 4 発注回数,取扱支店,住所,名前 21,近畿支店,530-0001 大阪府 ●●…,S名N子 59,中国支店,680-0001 鳥取県 ●●…,I十嵐K子 14,関東支店,千葉県 ▲▲…,Y口M羽 43,関東支店,330-0002 埼玉県 ▲▲…,Jヶ崎M嘉 37,東北支店,030-001 青森県 ●●…,M方A海 64,近畿支店,滋賀県 ■■…,F居T 60,中部支店,410-0001 静岡県 ■■…,O石I 88,近畿支店,530-0002 大阪府 ●●…,M川Mく 84,東北支店,010-00001 秋田県 ▲▲…,T時A梨 15,近畿支店,三重県 ▲▲…,H口Aやめ 【置換後】
52.
キャプチャと後方参照:()、n 52 発注回数,取扱支店,住所,名前,元は→,名前,取扱支店,発注回数,住所 21,近畿支店,530-0001 大阪府 ●●…,S名N子,元は→,S名N子,近畿支店,21,530-0001 大阪府 ●●… 59,中国支店,680-0001 鳥取県 ●●…,I十嵐K子,元は→,I十嵐K子,中国支店,59,680-0001 鳥取県 ●●… 14,関東支店,千葉県 ▲▲…,Y口M羽,元は→,Y口M羽,関東支店,14,千葉県 ▲▲… 43,関東支店,330-0002 埼玉県 ▲▲…,Jヶ崎M嘉,元は→,Jヶ崎M嘉,関東支店,43,330-0002 埼玉県 ▲▲… 37,東北支店,030-001 青森県 ●●…,M方A海,元は→,M方A海,東北支店,37,030-001 青森県 ●●… 64,近畿支店,滋賀県 ■■…,F居T,元は→,F居T,近畿支店,64,滋賀県 ■■… 60,中部支店,410-0001 静岡県 ■■…,O石I,元は→,O石I,中部支店,60,410-0001 静岡県 ■■… 88,近畿支店,530-0002 大阪府 ●●…,M川Mく,元は→,M川Mく,近畿支店,88,530-0002 大阪府 ●●… 84,東北支店,010-00001 秋田県 ▲▲…,T時A梨,元は→,T時A梨,東北支店,84,010-00001 秋田県 ▲▲… 15,近畿支店,三重県 ▲▲…,H口Aやめ,元は→,H口Aやめ,近畿支店,15,三重県 ▲▲… 【置換後】 検索 ^([^,]+),([^,]+),([^,]+),([^,n]+)$ 置換 3,2,4,1,元は→,0 1
2 3 4 0 • 順番を入れ替えつつ、元のレコードは後方に残す
53.
キャプチャと後方参照:()、n 53 • ファイルを一括でリネームするコマンドを作る WS000017.JPG WS000016.JPG WS000015.JPG WS000014.JPG … rename WS000017.JPG
WS000017.JPG.bk rename WS000016.JPG WS000016.JPG.bk rename WS000015.JPG WS000015.JPG.bk rename WS000014.JPG WS000014.JPG.bk … 検索 ^S+$ 置換 rename 0 0.bk
54.
キャプチャと後方参照:()、n 54 • 置換ばかりで後方参照していますが、検索でも後方参照は可能です • 同じ数字が11桁連続している不正データを探す 00000000000 12231981273 08496242754 11111111111 88888888888 13259385065 33358501999 61904013958 12329310847 00000000000 12231981273 08496242754 11111111111 88888888888 13259385065 33358501999 61904013958 12329310847 検索
^(d)1{10}$
55.
ものぐさマッチ:量指定子+? • 正規表現の量指定子はとても勤勉なの該当す る最長のマッチ結果を返却します。量指定子 に「?」を付与することで、最小のマッチ結果 を返却するようになります • これをものぐさマッチ(非よくばりマッチな どなど)と呼びます •
勤勉マッチは強欲マッチと呼んだりも 55
56.
ものぐさマッチ:量指定子? • (強欲|ものぐさ)マッチの範囲を比べる 56 属性,名前,取扱支店,... cu,S名N子,近畿支店,... pa,Jヶ崎M嘉,関東支店,... co,M方A海,東北支店,... co,O石I,中部支店,... cu,M川Mく,近畿支店,... pa,T時A梨,東北支店,... pa,H口Aやめ,近畿支店,... 【強欲】 検索 ^.+, 【ものぐさ】 検索
^.+?, 属性,名前,取扱支店,... cu,S名N子,近畿支店,... pa,Jヶ崎M嘉,関東支店,... co,M方A海,東北支店,... co,O石I,中部支店,... cu,M川Mく,近畿支店,... pa,T時A梨,東北支店,... pa,H口Aやめ,近畿支店,...
57.
正規表現のコツ • 法則性を見つけること 検索対象から法則性を見つけよう(カンマで区 切られてる?数字で構成されている?等) • 不用意なマッチに気をつける ^と$を入れない事によるバグは多いです。例えば YYYYMMDD_Hoge.log を「d{8}_Hoge.log」でマッチさせたら大丈夫? 57
58.
正規表現のコツ • 普段から正規表現を使うようにする 当たり前ですが、使わないと覚えません。本テキス トの内容を駆使すれば、効率は通常の3倍になるで しょう(MS-06S感) • 損益分岐点を考えて使う なんでも正規表現で解決するのは得策ではありませ ん。日付マッチで感じたと思いますが、日付の完璧 な妥当性を正規表現でマッチさせようとしたら大変 ですよ 58
59.
正規表現のコツ • Windows+テキストエディタのユーザを対象と しましたが、UNIX、Linuxコマンドが るよう になったはずです 1.
$ tar zOxvf hoge.tar.gz | grep -c -E '[^,]{3}, [0-9]{3}-[0-9]{4}' → 最初の例に類似した結果を取得 2. ls | grep '^[^.]*.log$' → 純粋なログファイル一覧を取得 59
60.
最初のサンプルについて • 最初のサンプルで使ったメタ文字は、本テキストに は載せていません。ぜひともググってみて下さい 60 (?<=^([^,]*,){3})(?! d{3}-d{4}[^d]) ※赤字部分は本テキストに乗せていません
61.
おしまい author:suwork 初版:2015/06/13 改定:2015/10/04 61 引用/参考資料 ・オライリー・ジャパン 詳説 正規表現 第3版 ・IM@S CG DB(http://imas.cg.db.n-hokke.com/) ・大塚チルド食品 スゴイダイズ(http://www.otsuka-chilled.co.jp/product/diz/) ・アイドルマスターシンデレラガールズ(mobage)内より画像を拝借(怒られたら消します)