プログラミング言語の正規表現まとめ

プログラミング

プログラミングで複雑なルールによる入力チェックや、文字列置換を行いたい時に正規表現を使えると非常に便利です。

複雑な入力チェックの処理をいくつも記述すると分かりづらいコードで、不具合の原因となる場合もあります。

正規表現を用いるとシンプルな記述方法で、簡潔なロジックで表すことができます。

その一方で、正規表現自体の記述方法はルールがたくさんあり、すべてを覚えるのは困難です。

必要な時に調べれば良いので、すべてを覚える必要はないと思いますが、どんなことができるのかは知っておく必要があります。

本ブログではこれまでに、JavaScript、Python、Java、Ruby、Goにおける正規表現を使った操作について解説してきました。

本記事では、各言語の正規表現を使った操作について比較しながらまとめていきます。

各言語における違いが分かったり、書き方を忘れてしまったときの復習用としても役立つ内容になっていますので、ぜひ最後までご覧いただければと思います。

本記事の最後に、各言語のソースコードを含む詳細内容を確認できる、関連ページへのリンクも用意しておきますので、気になる方はチェックしてみてください。

プログラミング言語の正規表現まとめ

各言語の正規表現として以下の内容を採り上げます。

  • 正規表現の作成方法
  • 正規表現による文字列チェック
  • 正規表現による文字列置換
  • 正規表現による文字列抽出
  • 正規表現のエスケープ

正規表現の作成方法

言語 正規表現の作成方法
JavaScript
  • スラッシュによって囲まれた文字列で表現する。
  • 2つ目のスラッシュの後に、オプションフラグを付けることができる。
Python
  • reモジュールを使用する。
  • 先頭にrをつけて、Raw文字列記法で表現する。
Java
  • java.util.regexパッケージを使用する。
  • 正規表現をコンパイルする方法としない方法がある。
  • コンパイル時にオプションフラグを付けることができる。
Ruby
  • スラッシュによって囲まれた文字列で表現する。(他の作成方法もある)
  • 2つ目のスラッシュの後に、オプションフラグを付けることができる。
Go
  • regexpパッケージを使用する。
  • バッククォーテーションによって囲まれた文字列で表現してコンパイルする。
  • 正規表現の先頭にオプションフラグを付けることができる。

正規表現の表現方法は各言語で異なります。
正規表現中の特殊文字やオプションは各言語ともにほぼ同じですが、詳細はリファレンスを見て確認が必要です。

正規表現による文字列チェック

言語 正規表現による文字列チェック
JavaScript
  • testメソッド:マッチするかどうかを真偽値で返す。
  • searchメソッド:最初にマッチした文字列の位置を返す。
  • matchメソッド:マッチした文字列を配列で返す。
Python
  • matchメソッド:文字列の先頭からマッチするとマッチオブジェクトを返す。
  • searchメソッド:文字列に対してマッチするとマッチオブジェクトを返す。
  • fullmatchメソッド:文字列全体がマッチするとマッチオブジェクトを返す。
  • findallメソッド:マッチした文字列をリストで返す。
Java
  • matchesメソッド:マッチするかどうかを真偽値で返す。
  • findメソッド:マッチした部分シーケンスを返す。
Ruby
  • match?メソッド:マッチするかどうかを真偽値で返す。
  • matchメソッド:マッチするとMatchDataオブジェクトを返す。
  • =~メソッド:マッチした文字列の位置を返す。
Go
  • MatchString関数:マッチするかどうかを真偽値で返す。
  • FindString関数:最初にマッチした文字列を返す。
  • FindStringIndex関数:最初にマッチした文字列の先頭と末尾の位置を配列で返す。
  • FindAllString関数:マッチした文字列を配列で返す。

文字列が正規表現にマッチしているかどうかをチェックする方法は、各言語ともに様々な種類が提供されています。

概ね似たような機能ではありますが、文字列の最初に一致なのか、部分に一致なのかの違いや一致した一部を返すのか、全体を返すのかの違いのあたりに注意して使用する必要があります。

正規表現による文字列置換

言語 正規表現による文字列置換
JavaScript
  • replaceメソッド:置換対象を一部とするのか全体とするのかは正規表現のオプションで指定する。
Python
  • subメソッド:マッチするすべての文字列を置換する。置換上限回数をメソッドの引数で指定できる。
Java
  • replaceAllメソッド:マッチするすべての文字列を置換する。
  • replaceFirstメソッド:マッチする最初の文字列を置換する。
Ruby
  • gsubメソッド:マッチするすべての文字列を置換する。
  • subメソッド:マッチする最初の文字列を置換する。
Go
  • ReplaceAllString関数:マッチするすべての文字列を置換する。

文字列の置換処理は大きくマッチするすべての文字列を置換対象とするか、一部を置換対象とするかで別れます。
それぞれ専用のメソッドが提供されているか、正規表現に指定するかなどは言語によって異なります。

正規表現による文字列抽出

言語 正規表現による文字列抽出
JavaScript
  • 抽出したいパターンを正規表現に括弧で指定する。
  • 参照する場合は、$1、$2で取得する。
Python
  • 抽出したいパターンを正規表現に括弧で指定する。
  • 参照する場合は、\1、\2で取得する。
Java
  • 抽出したいパターンを正規表現に括弧で指定する。
  • 参照する場合は、$1、$2で取得する。
Ruby
  • 抽出したいパターンを正規表現に括弧で指定する。
  • 参照する場合は、$1、$2で取得する。
Go
  • 抽出したいパターンを正規表現に括弧で指定する。
  • 参照する場合は、$1、$2で取得する。

正規表現で文字列を抽出する場合は、どの言語も括弧を使って抽出パターン指定します。

抽出した文字列を参照する方法は、抽出した順番に$1、$2で取得します。

Pythonは\1、\2となりますので、注意が必要です。

正規表現のエスケープ

言語 正規表現のエスケープ
JavaScript
  • 特殊文字の直前にバックスラッシュを付けてエスケープする。
Python
  • 特殊文字の直前にバックスラッシュを付けてエスケープする。
  • escapeメソッドでエスケープ後の文字列を取得することも可能。
Java
  • 特殊文字の直前にバックスラッシュを付けてエスケープする。
  • バックスラッシュ自体をさらにバックスラッシュでエスケープする必要がある。
Ruby
  • 特殊文字の直前にバックスラッシュを付けてエスケープする。
  • escapeメソッドでエスケープ後の文字列を取得することも可能。
Go
  • 特殊文字の直前にバックスラッシュを付けてエスケープする。
  • QuoteMeta関数でエスケープ後の文字列を取得することも可能。

プラスやピリオドなどの正規表現で意味を持つ特殊文字を文字として表現するには、エスケープが必要です。

どの言語も基本的には正規表現の中で、バックスラッシュを用いてエスケープを行います。

言語によっては、エスケープしてくれるメソッドも用意されているため、可変な正規表現を扱う場合には便利です。

正規表現はプログラム外でも役に立つ

正規表現はプログラムをシンプルにしてくれる便利なものですが、プログラム外でも役に立つことがあります。

エディタを使って文章を書いている際に、文字列の検索や置換をしたくなった場合に、正規表現で指定することが可能なエディタもあります。

Linuxのコマンドでも正規表現を使えるコマンドがたくさんあります。

Excelの関数などでも正規表現を使うことができます。

正規表現で書いてみたけど、思うようにマッチしないという場合には、正規表現チェッカーというツールで分かりやすく一致部分を表現してくれるツールもありますので活用してみてください。

正規表現は記述方法が難しいのですが、書けると非常に効率を上げてくれる手段になります。

サラッと正規表現を書ける人はカッコいいですよね。

 

今回は正規表現の作成方法や使用方法について、各言語を比較しながらまとめました。

ソースコードも含めた各言語の詳細が記述されている、関連ページヘのリンクを以下にまとめておきますので、気になる方はチェックしてみてください。

以上、参考になれば幸いです。

各言語の正規表現記事

JavaScriptの正規表現【プログラミング初心者向け教材】
複雑なルールによる入力チェックや置換処理に正規表現を用いるとシンプルな記述で実現することができます。 一方で正規表現は記述方法のルールがたくさんあり、覚えるのが困難ということもあります。 本記事では、JavaScriptにおける正規表現について、よく使われる操作や記述方法についてまとめます。
Pythonの正規表現【プログラミング初心者向け教材】
複雑なルールによる入力チェックや置換処理に正規表現を用いるとシンプルな記述で実現することができます。 一方で正規表現は記述方法のルールがたくさんあり、覚えるのが困難ということもあります。 本記事では、Pythonにおける正規表現について、よく使われる操作や記述方法についてまとめます。
Javaの正規表現【プログラミング初心者向け教材】
複雑なルールによる入力チェックや置換処理に正規表現を用いるとシンプルな記述で実現することができます。 一方で正規表現は記述方法のルールがたくさんあり、覚えるのが困難ということもあります。 本記事では、Javaにおける正規表現について、よく使われる操作や記述方法についてまとめます。
Rubyの正規表現【プログラミング初心者向け教材】
複雑なルールによる入力チェックや置換処理に正規表現を用いるとシンプルな記述で実現することができます。 一方で正規表現は記述方法のルールがたくさんあり、覚えるのが困難ということもあります。 本記事では、Rubyにおける正規表現について、よく使われる操作や記述方法についてまとめます。
Goの正規表現【プログラミング初心者向け教材】
複雑なルールによる入力チェックや置換処理に正規表現を用いるとシンプルな記述で実現することができます。 一方で正規表現は記述方法のルールがたくさんあり、覚えるのが困難ということもあります。 本記事では、Goにおける正規表現について、よく使われる操作や記述方法についてまとめます。

コメント

タイトルとURLをコピーしました