正規表現ツール |
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 Schema |
Xojo |
XQuery と XPath |
XRegExp |
データベース |
MySQL |
Oracle |
PostgreSQL |
このサイトの詳細 |
はじめに |
正規表現クイックスタート |
正規表現チュートリアル |
置換文字列チュートリアル |
アプリケーションと言語 |
正規表現の例 |
正規表現リファレンス |
置換文字列リファレンス |
書籍レビュー |
印刷可能なPDF |
このサイトについて |
RSSフィードとブログ |
PHPは動的なWebページを作成するためのオープンソース言語です。PHPには、正規表現を扱うための3種類の関数セットがあります。
最も重要な正規表現関数セットは、pregで始まります。これらの関数は、PCREライブラリ(Perl互換正規表現)をPHPでラップしたものです。このWebサイトの正規表現チュートリアルでPCRE正規表現フレーバーについて述べられていることは、PHPのpreg関数にも当てはまります。チュートリアルでPHPについて具体的に説明する場合、preg関数を使用していることを前提としています。preg関数は、正規表現を使用するすべての新しいPHPコードに使用する必要があります。PHP 4.2.0(2002年4月)以降、PHPにはPCREがデフォルトで含まれています。
最も古い正規表現関数セットは、eregで始まるものです。これらは、従来のUNIX egrepコマンドのように、POSIX拡張正規表現を実装しています。これらの関数は、主にPHP 3との後方互換性のために用意されています。PHP 5.3.0以降、正式に非推奨となっています。遅延量指定子、先読み・後読み、Unicodeなど、多くの最新の正規表現機能は、ereg関数ではサポートされていません。「拡張」という名称に惑わされないでください。POSIX標準は1986年に定義されたもので、正規表現はそれ以来大きく進化しています。
最後のセットは、eregセットのバリアントで、mb_という「マルチバイト」を表すプレフィックスが関数名に付いています。eregは正規表現と対象文字列を8ビット文字のシーケンスとして扱いますが、mb_eregはさまざまなコードページのマルチバイト文字を扱うことができます。正規表現で東アジアの文字を個々の文字として扱う場合は、mb_ereg関数を使用するか、preg関数に/u修飾子を付ける必要があります。mb_eregはPHP 4.2.0以降で利用可能です。同じPOSIX EREフレーバーを使用します。
すべてのpreg関数は、Perl構文を使用して正規表現を文字列として指定する必要があります。Perlでは、/regex/は正規表現を定義します。PHPでは、これはpreg_match('/regex/', $subject)になります。スラッシュを正規表現のデリミタとして使用する場合、正規表現内のスラッシュはバックスラッシュでエスケープする必要があります。そのため、https://www\.jgsoft\.com/は'/https:\/\/www\.jgsoft\.com\//'になります。Perlと同様に、preg関数は英数字以外の文字を正規表現のデリミタとして使用できます。URLの正規表現は、パーセント記号を正規表現のデリミタとして使用すると、'%https://www\.jgsoft\.com/%'のように、スラッシュをエスケープする必要がないため、より読みやすくなります。正規表現にパーセント記号が含まれている場合は、パーセント記号をエスケープする必要があります。
C#やJavaのようなプログラミング言語とは異なり、PHPでは文字列内のすべてのバックスラッシュをエスケープする必要はありません。PHP文字列にバックスラッシュをリテラル文字として含める場合、エスケープする必要があるのは、エスケープする必要がある別の文字が後続する場合のみです。シングルクォートで囲まれた文字列では、シングルクォートとバックスラッシュ自体のみをエスケープする必要があります。そのため、上記の正規表現では、リテラルドットの前にバックスラッシュを2倍にする必要はありませんでした。単一のバックスラッシュに一致する正規表現\\は、PHP preg文字列として'/\\\\/'になります。正規表現で変数補間を使用する場合を除き、PHPの正規表現には常にシングルクォートで囲まれた文字列を使用する必要があります。そうすることで、バックスラッシュの面倒な重複を避けることができます。
大文字と小文字を区別しないなどの正規表現マッチングオプションを指定するには、Perlと同じ方法を使用します。'/regex/i'は、正規表現を大文字と小文字を区別せずに適用します。'/regex/s'は、ドットをすべての文字に一致させます。'/regex/m'は、行頭と行末のアンカーを、対象文字列に埋め込まれた改行に一致させます。'/regex/x'は、フリースペーシングモードをオンにします。複数の文字を指定して、複数のオプションをオンにすることができます。'/regex/misx'は、4つすべてのオプションをオンにします。
特別なオプションは、/uで、デフォルトの8ビットマッチングモードではなく、Unicodeマッチングモードをオンにします。/uを使用する正規表現には、\x{FFFF}, \Xまたは\p{L}を指定して、Unicode文字、書記素、プロパティ、またはスクリプトに一致させる必要があります。PHPは'/regex/u'をASCII文字列ではなくUTF-8文字列として解釈します。
ereg関数と同様に、bool **preg_match** (string pattern, string subject [, array groups])は、正規表現パターンが対象文字列または対象文字列の一部に一致する場合にTRUEを返します。3番目のパラメータを指定すると、pregは、最初のキャプチャグループによって一致した部分文字列を$groups[1]. に格納し、$groups[2]には2番目のペアが格納されます。正規表現パターンで名前付きキャプチャを使用している場合は、. $groups['name']で名前でグループにアクセスできます。 $groups[0]には全体の一致が保持されます。
int **preg_match_all** (string pattern, string subject, array matches, int flags)は、対象文字列内の正規表現パターンに一致するすべてを配列「matches」に格納します。フラグとしてPREG_SET_ORDERを指定した場合、$matches[0]は、preg_matchによって設定される$groups. 配列と同様に、最初の一致の一致と後方参照を含む配列になります。$matches[1]は2番目の一致の結果を保持します。PREG_PATTERN_ORDERを指定した場合、$matches[0]$matches[0]は連続した正規表現の完全一致を含む配列、配列と同様に、最初の一致の一致と後方参照を含む配列になります。$matches[1]は2番目の一致の結果を保持します。PREG_PATTERN_ORDERを指定した場合、$matches[1]はすべての一致の最初の後方参照を含む配列、$matches[2]
は各一致の2番目の後方参照を含む配列になります。 array **preg_grep** (string pattern, array subjects)
は、配列「subjects」内の文字列のうち、正規表現パターンに一致するすべての文字列を含む配列を返します。mixed **preg_replace** (mixed pattern, mixed replacement, mixed subject [, int limit])は、対象文字列内の正規表現パターンのすべての一致を置換文字列で置換した文字列を返します。最大でlimit個の置換が行われます。重要な違いの1つは、limitを除くすべてのパラメータが文字列ではなく配列になる可能性があることです。その場合、preg_replace
は、配列の要素を同時に反復処理しながら、複数回ジョブを実行します。一部のパラメータに文字列を使用し、他のパラメータに配列を使用することもできます。その場合、関数は配列を反復処理し、各反復に対して同じ文字列を使用します。パターンと置換の配列を使用すると、単一の対象文字列に対して一連の検索と置換操作を実行できます。対象文字列に配列を使用すると、多くの対象文字列に対して同じ検索と置換操作を実行できます。**preg_replace_callback** (mixed pattern, callback replacement, mixed subject [, int limit])個の置換が行われます。重要な違いの1つは、limitを除くすべてのパラメータが文字列ではなく配列になる可能性があることです。その場合、は$groupspreg_replace
と同様に機能しますが、2番目のパラメータは文字列または文字列の配列ではなくコールバックを取ります。コールバック関数は、各一致に対して呼び出されます。コールバックは単一のパラメータを受け入れる必要があります。このパラメータは文字列の配列で、要素0は正規表現の全体一致を保持し、他の要素はキャプチャグループによって一致したテキストを保持します。これはpreg_matchから取得するのと同じ配列です。コールバック関数は、一致を置き換えるテキストを返す必要があります。一致を削除するには、空の文字列を返します。この一致をスキップするには、$groups[0]を返します。 2+3コールバックを使用すると、正規表現だけではできない強力な検索と置換操作を実行できます。たとえば、正規表現5(\d+)\+(\d+)
function regexadd($groups) { return $groups[1] + $groups[2]; }
を検索する場合、コールバック**preg_replace_callback** (mixed pattern, callback replacement, mixed subject [, int limit])`return $groups[1] + $groups[2];`を使用して
array **preg_split** (string pattern, string subject [, int limit])eregは、split関数と同様に文字列を分割しますが、正規表現パターンにPerl構文を使用します。preg関数セットの詳細については、PHPマニュアルを参照してください。ereg関数セット予想どおり、ereg
関数は、正規表現を文字列として指定する必要があります。ereg('regex', "subject")eregは、regexがeregは、最初の括弧のペアの間にある正規表現の部分で一致した部分文字列を格納します(括弧を参照)。$groups[1]. に格納し、には2番目のペアが格納され、以降も同様です。eregiはグループ化のみの括弧をサポートしていないことに注意してください。eregは大文字と小文字を区別します。eregiは大文字と小文字を区別しない同等の関数です。
string ereg_replace (string pattern, string replacement, string subject)対象文字列内の正規表現パターンに一致するすべてを置換文字列に置き換えます。置換文字列には後方参照を使用できます。\\0は正規表現全体の一致部分であり、\\1は最初の後方参照、\\2は2番目の後方参照などです。使用可能な後方参照の最大数は\\9. ereg_replaceは大文字と小文字を区別します。eregi_replaceは大文字と小文字を区別しない同等の関数です。
array split (string pattern, string subject [, int limit])正規表現パターンを使用して、対象文字列を文字列の配列に分割します。配列には、正規表現の一致部分の間にある部分文字列が含まれます。実際に一致したテキストは破棄されます。制限を指定した場合、結果の配列には最大でその数の部分文字列が含まれます。対象文字列は最大で limit-1 回分割され、配列の最後の項目には、分割されていない対象文字列の残りの部分が含まれます。`return $groups[1] + $groups[2];`は大文字と小文字を区別します。splitiは大文字と小文字を区別しない同等の関数です。
ereg関数セットの詳細については、PHPマニュアルを参照してください。
array **preg_split** (string pattern, string subject [, int limit])mb_ereg関数はereg関数とまったく同じように動作しますが、1つの重要な違いがあります。eregは正規表現と対象文字列を8ビット文字のシーケンスとして扱いますが、mb_eregは、さまざまなコードページのマルチバイト文字を処理できます。たとえば、Windowsコードページ936(簡体字中国語)でエンコードされた単語中国(「中国」) は、D6D0B9FA の 4 バイトで構成されます。正規表現.を使用してこの文字列に対して ereg 関数を使用すると、最初のバイト D6 が結果として得られます。ereg 関数はバイト指向であるため、ドットは正確に 1 バイトに一致します。呼び出し後に mb_ereg 関数を使用するとmb_regex_encoding("CP936")バイト D6D0 または最初の文字中が結果として得られます。
正規表現が正しいコードページを使用するようにするには、mb_regex_encoding()を呼び出してコードページを設定します。設定しない場合、mb_internal_encoding()によって返されるか、設定されたコードページが代わりに使用されます。
PHPスクリプトでUTF-8を使用している場合は、preg関数に/u修飾子を使用して、個々のバイトではなくマルチバイトUTF-8文字に一致させることができます。preg関数は、他のコードページをサポートしていません。
mb_ereg関数セットの詳細については、PHPマニュアルを参照してください。
書籍 Mastering Regular Expressions は、正規表現について知りたいことすべてと知りたくないことすべてを説明しているだけではありません。また、PHP の preg 関数セットに関する優れた章があり、基礎となる PCRE 正規表現エンジンの詳細と、より高度なテクニックを示す PHP コードの例が豊富に掲載されています。この本では、ereg 関数セットと mb_ereg 関数セットについては扱っていません。
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 Schema | Xojo | XQuery & XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
ページURL: https://regular-expressions.dokyumento.jp/php.html
ページ最終更新日: 2021年8月24日
サイト最終更新日: 2024年3月15日
Copyright © 2003-2024 Jan Goyvaerts. All rights reserved.