クイックスタート
チュートリアル
ツール&言語
リファレンス
書評
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
一般的なアプリケーション
EditPad Lite
EditPad Pro
言語とライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML スキーマ
Xojo
XQuery & XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトについてさらに
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書評
印刷可能なPDF
このサイトについて
RSSフィードとブログ
RegexBuddy—The best regex editor and tester for Perl developers!

Perlの豊富な正規表現サポート

Perlは元々、ラリー・ウォールによって柔軟なテキスト処理言語として設計されました。長年にわたり、それは本格的なプログラミング言語へと成長し、テキスト処理に強い焦点を当て続けています。ワールドワイドウェブが普及すると、PerlはCGIスクリプトを作成するための事実上の標準となりました。CGIスクリプトは、データベースやウェブサイト訪問者からの入力に基づいて動的なウェブページを生成する小さなソフトウェアです。CGIスクリプトは基本的にテキスト処理スクリプトであるため、Perlは当時から現在に至るまで自然な選択肢でした。

Perlがテキストの管理と操作に焦点を当てているため、正規表現テキストパターンはPerl言語の不可欠な部分です。これは、正規表現がアドオンライブラリとして利用可能な他のほとんどの言語とは対照的です。Perlでは、m//演算子を使用して、正規表現が文字列と一致するかどうかをテストできます。例:

if ($string =~ m/regex/) {
  print 'match';
} else {
  print 'no match';
}

正規表現による検索と置換も同様に簡単です。

$string =~ s/regex/replacement/g;

最後のスラッシュの後に「g」を追加しました。「g」は「グローバル」を表し、Perlに最初のマッチだけでなく、すべてのマッチを置換するように指示します。オプションは通常、「/g」のようにスラッシュを含めて示されますが、追加のスラッシュは必要ありません。また、スラッシュの代わりに任意の非単語文字を使用することもできます。正規表現にスラッシュが含まれている場合は、s!regex!replacement!g.

のような別の文字を使用します。「i」を追加して正規表現の大文字と小文字を区別しないようにすることもできます。「s」を追加してドットが改行と一致するようにすることもできます。「m」を追加してドル記号とキャレットが文字列の先頭と末尾だけでなく、文字列に埋め込まれた改行でも一致するようにすることができます。

組み合わせると、次のようになります。m/regex/sim;

正規表現関連の特殊変数

Perlには、すべてのm//またはs///正規表現の一致後に設定される多数の特殊変数があります。$1, $2, $3などは、バックリファレンスを保持します。$+は、最後の(番号が最も大きい)バックリファレンスを保持します。$&(ドル記号とアンパサンド)は、正規表現全体の一致を保持します。

@-は、文字列への一致開始インデックスの配列です。$-[0]は、正規表現全体の一致の開始位置、$-[1]最初のバックリファレンスの開始位置などを保持します。同様に、@+は一致終了位置を保持します。一致の長さを取得するには、$+[0]から$-[0].

を減算します。Perl 5.10以降では、連想配列%+を使用して、名前付きキャプチャグループによって一致したテキストを取得できます。たとえば、$+{name}は、グループ「name」によって一致したテキストを保持します。Perlは、名前を参照してキャプチャグループの一致位置を取得する方法を提供していません。名前付きグループにも番号が付けられているため、@-@+を名前付きグループに使用できますが、グループの番号を自分で調べる必要があります。

$'(ドル記号とアポストロフィまたはシングルクォート)は、正規表現の一致の後(右側)の文字列の部分を保持します。$`(ドル記号とバッククォート)は、正規表現の一致の前(左側)の文字列の部分を保持します。パフォーマンスが重要なスクリプトでは、これらの変数の使用はお勧めできません。これは、Perlがスクリプト全体のすべての正規表現の一致を遅くするためです。

これらの変数はすべて読み取り専用であり、次の正規表現の一致が試行されるまで保持されます。これらは、囲んでいるスコープの先頭に暗黙的な「local」があるかのように、動的にスコープされます。したがって、正規表現の一致を行い、正規表現の一致を行うサブルーチンを呼び出すと、そのサブルーチンが戻った後も、変数は最初の一致時のまま設定されます。

文字列内のすべての一致を見つける

「/g」修飾子は、文字列内のすべての正規表現の一致を処理するために使用できます。最初のm/regex/gは最初の一致を見つけ、2番目のm/regex/gは2番目の一致を見つけます。など。次のマッチの試行が開始される文字列内の場所は、文字列ごとに個別にPerlによって自動的に記憶されます。例を以下に示します。

while ($string =~ m/regex/g) {
  print "Found '$&'.  Next attempt at character " . pos($string)+1 . "\n";
}

このpos()関数は、次の試行が開始される位置を取得します。文字列の最初の文字の位置はゼロです。この位置は、関数を代入の左辺として使用することで変更できます。例:pos($string) = 123;.

さらに読む

Mastering Regular Expressions上記は、Perlで正規表現を使用する方法について説明しており、おそらく知っておく必要があるすべてです。しかし、Perlが実行できるすべての正規表現関連のトリックに関する詳細な情報を入手したい場合は、Jeffrey Friedlの第2版のMastering Regular Expressionsを入手することをお勧めします。正規表現関連のPerlの特異性に関する興味深い80ページの章があります。一般的なPerlの本には、通常、このウェブサイトのチュートリアルでよりよく説明されている一般的な内容しか含まれていません。

「Mastering Regular Expressions」の書評

| クイックスタート | チュートリアル | ツール&言語 |  | リファレンス | 書評 |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML スキーマ | Xojo | XQuery & XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |