LoginSignup
55
56

More than 5 years have passed since last update.

正規表現を体系的に学ぶつもりがない人のためのプチ講座

Posted at

「正規表現をきちんと学ぶ気はない、でも仕事では使いたい!」とかお思いの欲張りなあなたのための記事です。

正規表現の定義

パターンとターゲットとなる文字列(以下 対象)をマッチさせます。
(ホントのところはウィキペディアとかで調べてね!)

パターンの構成

【文字+文字の数(以下 量化子)】×n

覚えるべき記号(メタ文字)

たったの 6つです。

  • ^ => 対象の始まり
  • $ => 対象の終わり
  • . => どんな文字でもいいから、1文字

以下は量化子です。

  • * => 直前の文字がいくつあっても、なくてもいい
  • + => 直前の文字がいくつあってもいいけど、ないとダメ
  • ? => 直前の文字はないか、1つだけ

なお、これらの文字を記号としてではなく文字としてそのまま扱いたい場合、\でエスケープできます。

文字クラス

文字は普通にaとかけばaにマッチします。が、複雑なマッチをしたいときは文字クラスを使います。

  • [aiueo] => aiueoどれかの文字
  • [^aiueo] => aiueo 以外の文字
  • [0-9] => 数字1文字

単語単位でマッチさせたい場合

()の中に単語を入れます。例えば、hackerの前にsuperが最低1つついた文字列(例えばsupersupersuperhacker)にマッチさせたい場合、
(super)+hacker
というパターンが使えます。
また、単語は|を使うことで「または」マッチができます。(super|great)+hackerとすると、greatsupergreathackerのような文字列にマッチします。

使ってみる

拡張子がrbで、かつファイル名にpythonまたはperlが含まれているファイルだけを探したいとします。この場合、ファイル名が対象です。パターンは、
^.*(python|perl)+.*\.rb$
となります。左から読み下すと、
「対象が始まり、どんな文字列があってもなくてもよく、pythonまたはperlという文字列が最低1つはあり、どんな文字列があってもなくてもよく、.rbという文字列が1つあり、対象が終わる」
ような対象にマッチするわけです。
http://rubular.com/r/loDT0sefmq
上記URLに結果があるので確認してみてください。

まとめ

正規表現は難しい(´・ω・`)

55
56
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
56