SlideShare uma empresa Scribd logo
1 de 8
正規表現のススメ
正規表現について 正規表現(せいきひょうげん、 regular expression )とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。 (wikipedia: 正規表現  http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE ) というお堅い説明ですが それが嫌いな人向けの説明としては 指定した、文字列 ( 数字含む ) の検索・置換等が楽になります。 ただ パターン と呼ばれるマッチさせるための表記法が初心者にはとっつきにくい感はあり。 ※ 正規表現にも色々ありますが、今回は Perl の場合においての正規表現として紹介します。 ※ PHP ユーザーも Perl 互換の関数 (preg 系 ) があるのでそれにも応用可能です。
エスケープシーケンス ※ 1  キャリッジリターン  Carriage Return(CR) =  改行位置と思ってください。 MacOS ではこの CR で改行を表します。 Windows ではラインフィード (LF = ) とキャリッジリターンを組み合わせて改行を表します () 。 Unix 系ではラインフィードで改行を表します。 キャリッジ とは タイプライター機器において文字を打ち込みつつ移動する部品の名称 。 これを元に戻す  =  改行する ということがあり、その 名残 らしい。 それぞれ 、ダブルクォート、シングルクォートを表記  、  、  EOF( エンドオブファイル  =  ファイルの終端 )  キャリッジリターン ( ※1)  バックスペース  内臓ベルを鳴らす ( 制御系コードの模様 )  タブコード  改行
メタ文字 (1/2) ■ メタ文字・・・以下のような特殊な意味を持つ文字と思ってください a|b|c ならば a もしくは b または c がマッチする。といったような いずれか (OR) を表す。 |( パイプライン ) グループ化。 (aaa) とすれば、文字列中にある aaa がマッチ。 (   ) 文字クラス。 POSIX ブラケット表現とも呼ぶらしいです。 任意の文字にマッチさせる文字の集合体と思ってください。 お [ 父母兄姉 ] さん と表現した場合、「 お父さん 」「 お母さん 」「 お兄さん 」「 お姉さん 」のいずれにもマッチします。便利! [ ] エスケープ文字。特殊な文字をマッチさせたい際に使用。 + をマッチさせたいが、メタ文字であるので・・・  といったようにすればマッチする。 文字列の末尾 $ 文字列の先頭。 アクサンシルコンフレックス と読むらしい。 べき乗記号 と読んでました。 「 あいうえおあいうえお 」とあるうち、「 ^ あ 」とした場合 先頭の「 あ 」がマッチします。途中にある「 あ 」はマッチしません。 ^ 0 または 1 回だけの文字 ? 1 回以上の連続する文字 + 0 回以上の連続する文字 *( アスタリスク ) 改行を除く 任意の 1 文字 .( ピリオド )
メタ文字 (2/2) ■ メタ文字・・・以下のような特殊な意味を持つ文字と思ってください 空白以外にマッチ。 [^ ] と同じ。  単語の境界以外にマッチ。  単語の境界にマッチ。   もしくは  の間。  空白にマッチ。 [ ] と同じ。  英数字以外にマッチ。  [^_a-zA-Z0-9] と同じ。  英数字にマッチ。 [_a-zA-Z0-9] と同じ。  数字以外にマッチ。 [^0-9] と同じ。  数字にマッチ。 [0-9] と同じ。  量指定子。 n は数値。 aaa{3} aaaa とあった場合、  aaa(3 つ ) がマッチする {n}
Tips(1/2) ■ 範囲指定 文字クラス内に -( ハイフン ) を使用すると範囲が指定できます。 例 ) 01234 ~ 89 のいずれかにマッチ。 文字列: 0123456789 パターン: [0-9] 例 2)[a-z] 文字列 :abcdefghijklmnopqrstuvwxyz パターン: abc ~ xyz のいずれかにマッチ。 例 3) abc と mno のいずれかにマッチ。 文字列: abcdefghijklmnopqrstuvwxyz  パターン: [a-cm-o] ■ 否定文字クラス 文字列の先頭を表す ^ は文字クラス [] 内で使用すると、否定となります。 [^ マッチさせたくない文字 ] [^0-9] =  数字 (0-9) 以外がマッチ ■ n 回以上、 m 回以下にマッチ 指定文字が n 回以上、 m 回以下のものをマッチ、といったことができます。 {n,m} 例 ) dddd と eeeee のみがマッチ 文字列: a bb ccc dddd eeeee  パターン: {4,5}
Tips(2/2) ■ 行末の空白を表す +$  =  空白、 + = 1 文字以上存在、 $ =  行末 これを使って行末に空白があった場合削除できます。 逆に行頭にできたインデントやタブなどの空白を削除する場合 ^+ ^ =  行頭、  =  空白、 + = 1 文字以上存在 ■ 肯定の後読み ( と呼ぶらしいです ) abcdef とあった場合のみマッチします。 (?<=abc)def abccdef 等の場合はマッチしません。 ■ 否定の後読み aabef とあった場合等、 def の前に abc が無い場合のみマッチ します。 (?<!abc)def  abcdef =  マッチしない bbdef =  マッチする ※ 逆に 肯定の先読み 、 否定の先読み といったようなものもあります。 abc(?=def)  = abc のあとに def がある場合マッチ ( 肯定の先読み ) abc(?!def)  = abc の後に def が無い場合マッチ ( 否定の先読み )
まとめ 正規表現を使えば、様々なパターンの言葉が来ても応用が利くようにできており コードを何行も書く必要がなくなったりすることも多々あります。 ただ、正規表現に慣れていない人には理解し難いこともあり コードが見難いといった弊害もあります。 また同じ正規表現を表そうとしても人によってパターンが違う ( 方言と呼ぶらしい ?) がありますが そういうデメリットは些細なこと!と思えるほど便利なものなので是非使いまくると良いかと思います。 引用、参考元 wikipedia: 正規表現 http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE サルにもわかる正規表現入門 http://www.mnet.ne.jp/~nakama/ PHP 正規表現チェッカー ( 長い正規表現を書く場合等に使用する ? 正規表現シミュレーションみたいなもの ) http://www.rider-n.sakura.ne.jp/regexp/regexp.php 正規表現アプレット (Java Applet) http://www.noids.net/applet/regex/index.htm

Mais conteúdo relacionado

Destaque

フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903ngi group.
 
Q4 Mでメッセージキュー
Q4 MでメッセージキューQ4 Mでメッセージキュー
Q4 Mでメッセージキューngi group.
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~ngi group.
 
Html5 入門編 その2
Html5 入門編 その2Html5 入門編 その2
Html5 入門編 その2ngi group.
 
素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~ngi group.
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみたngi group.
 
Git紹介~入門編~
Git紹介~入門編~Git紹介~入門編~
Git紹介~入門編~ngi group.
 
muninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングmuninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングngi group.
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginxngi group.
 
SvnからGitへの移行について
SvnからGitへの移行についてSvnからGitへの移行について
SvnからGitへの移行についてngi group.
 
RubyとPost Gis
RubyとPost GisRubyとPost Gis
RubyとPost Gisngi group.
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Socialngi group.
 
Zshって最強らしい
Zshって最強らしいZshって最強らしい
Zshって最強らしいngi group.
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】MOCKS | Yuta Morishige
 

Destaque (18)

フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903フラクタリスト技術知識共有会発表資料 090903
フラクタリスト技術知識共有会発表資料 090903
 
Q4 Mでメッセージキュー
Q4 MでメッセージキューQ4 Mでメッセージキュー
Q4 Mでメッセージキュー
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~
 
Yii紹介
Yii紹介Yii紹介
Yii紹介
 
Html5 入門編 その2
Html5 入門編 その2Html5 入門編 その2
Html5 入門編 その2
 
素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~素敵なjavascript ~google chrome編~
素敵なjavascript ~google chrome編~
 
20091119_sinatraを使ってみた
20091119_sinatraを使ってみた20091119_sinatraを使ってみた
20091119_sinatraを使ってみた
 
Git紹介~入門編~
Git紹介~入門編~Git紹介~入門編~
Git紹介~入門編~
 
muninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリングmuninで簡単&自在サーバーモニタリング
muninで簡単&自在サーバーモニタリング
 
軽量高機能webサーバーnginx
軽量高機能webサーバーnginx軽量高機能webサーバーnginx
軽量高機能webサーバーnginx
 
SvnからGitへの移行について
SvnからGitへの移行についてSvnからGitへの移行について
SvnからGitへの移行について
 
The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar The Royal Lagoon Bhubaneswar
The Royal Lagoon Bhubaneswar
 
RubyとPost Gis
RubyとPost GisRubyとPost Gis
RubyとPost Gis
 
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
 
Tokyo Cabinet
Tokyo CabinetTokyo Cabinet
Tokyo Cabinet
 
Zshって最強らしい
Zshって最強らしいZshって最強らしい
Zshって最強らしい
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】【プレゼン】見やすいプレゼン資料の作り方【初心者用】
【プレゼン】見やすいプレゼン資料の作り方【初心者用】
 

正規表現のススメ_20091217

  • 2. 正規表現について 正規表現(せいきひょうげん、 regular expression )とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。 (wikipedia: 正規表現 http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE ) というお堅い説明ですが それが嫌いな人向けの説明としては 指定した、文字列 ( 数字含む ) の検索・置換等が楽になります。 ただ パターン と呼ばれるマッチさせるための表記法が初心者にはとっつきにくい感はあり。 ※ 正規表現にも色々ありますが、今回は Perl の場合においての正規表現として紹介します。 ※ PHP ユーザーも Perl 互換の関数 (preg 系 ) があるのでそれにも応用可能です。
  • 3. エスケープシーケンス ※ 1 キャリッジリターン Carriage Return(CR) = 改行位置と思ってください。 MacOS ではこの CR で改行を表します。 Windows ではラインフィード (LF = ) とキャリッジリターンを組み合わせて改行を表します () 。 Unix 系ではラインフィードで改行を表します。 キャリッジ とは タイプライター機器において文字を打ち込みつつ移動する部品の名称 。 これを元に戻す = 改行する ということがあり、その 名残 らしい。 それぞれ 、ダブルクォート、シングルクォートを表記 、 、 EOF( エンドオブファイル = ファイルの終端 ) キャリッジリターン ( ※1) バックスペース 内臓ベルを鳴らす ( 制御系コードの模様 ) タブコード 改行
  • 4. メタ文字 (1/2) ■ メタ文字・・・以下のような特殊な意味を持つ文字と思ってください a|b|c ならば a もしくは b または c がマッチする。といったような いずれか (OR) を表す。 |( パイプライン ) グループ化。 (aaa) とすれば、文字列中にある aaa がマッチ。 (   ) 文字クラス。 POSIX ブラケット表現とも呼ぶらしいです。 任意の文字にマッチさせる文字の集合体と思ってください。 お [ 父母兄姉 ] さん と表現した場合、「 お父さん 」「 お母さん 」「 お兄さん 」「 お姉さん 」のいずれにもマッチします。便利! [ ] エスケープ文字。特殊な文字をマッチさせたい際に使用。 + をマッチさせたいが、メタ文字であるので・・・ といったようにすればマッチする。 文字列の末尾 $ 文字列の先頭。 アクサンシルコンフレックス と読むらしい。 べき乗記号 と読んでました。 「 あいうえおあいうえお 」とあるうち、「 ^ あ 」とした場合 先頭の「 あ 」がマッチします。途中にある「 あ 」はマッチしません。 ^ 0 または 1 回だけの文字 ? 1 回以上の連続する文字 + 0 回以上の連続する文字 *( アスタリスク ) 改行を除く 任意の 1 文字 .( ピリオド )
  • 5. メタ文字 (2/2) ■ メタ文字・・・以下のような特殊な意味を持つ文字と思ってください 空白以外にマッチ。 [^ ] と同じ。 単語の境界以外にマッチ。 単語の境界にマッチ。 もしくは の間。 空白にマッチ。 [ ] と同じ。 英数字以外にマッチ。 [^_a-zA-Z0-9] と同じ。 英数字にマッチ。 [_a-zA-Z0-9] と同じ。 数字以外にマッチ。 [^0-9] と同じ。 数字にマッチ。 [0-9] と同じ。 量指定子。 n は数値。 aaa{3} aaaa とあった場合、 aaa(3 つ ) がマッチする {n}
  • 6. Tips(1/2) ■ 範囲指定 文字クラス内に -( ハイフン ) を使用すると範囲が指定できます。 例 ) 01234 ~ 89 のいずれかにマッチ。 文字列: 0123456789 パターン: [0-9] 例 2)[a-z] 文字列 :abcdefghijklmnopqrstuvwxyz パターン: abc ~ xyz のいずれかにマッチ。 例 3) abc と mno のいずれかにマッチ。 文字列: abcdefghijklmnopqrstuvwxyz パターン: [a-cm-o] ■ 否定文字クラス 文字列の先頭を表す ^ は文字クラス [] 内で使用すると、否定となります。 [^ マッチさせたくない文字 ] [^0-9] = 数字 (0-9) 以外がマッチ ■ n 回以上、 m 回以下にマッチ 指定文字が n 回以上、 m 回以下のものをマッチ、といったことができます。 {n,m} 例 ) dddd と eeeee のみがマッチ 文字列: a bb ccc dddd eeeee パターン: {4,5}
  • 7. Tips(2/2) ■ 行末の空白を表す +$ = 空白、 + = 1 文字以上存在、 $ = 行末 これを使って行末に空白があった場合削除できます。 逆に行頭にできたインデントやタブなどの空白を削除する場合 ^+ ^ = 行頭、 = 空白、 + = 1 文字以上存在 ■ 肯定の後読み ( と呼ぶらしいです ) abcdef とあった場合のみマッチします。 (?<=abc)def abccdef 等の場合はマッチしません。 ■ 否定の後読み aabef とあった場合等、 def の前に abc が無い場合のみマッチ します。 (?<!abc)def abcdef = マッチしない bbdef = マッチする ※ 逆に 肯定の先読み 、 否定の先読み といったようなものもあります。 abc(?=def) = abc のあとに def がある場合マッチ ( 肯定の先読み ) abc(?!def) = abc の後に def が無い場合マッチ ( 否定の先読み )
  • 8. まとめ 正規表現を使えば、様々なパターンの言葉が来ても応用が利くようにできており コードを何行も書く必要がなくなったりすることも多々あります。 ただ、正規表現に慣れていない人には理解し難いこともあり コードが見難いといった弊害もあります。 また同じ正規表現を表そうとしても人によってパターンが違う ( 方言と呼ぶらしい ?) がありますが そういうデメリットは些細なこと!と思えるほど便利なものなので是非使いまくると良いかと思います。 引用、参考元 wikipedia: 正規表現 http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE サルにもわかる正規表現入門 http://www.mnet.ne.jp/~nakama/ PHP 正規表現チェッカー ( 長い正規表現を書く場合等に使用する ? 正規表現シミュレーションみたいなもの ) http://www.rider-n.sakura.ne.jp/regexp/regexp.php 正規表現アプレット (Java Applet) http://www.noids.net/applet/regex/index.htm