PHP 正規表現 (PCRE)

正規表現 (regular expression) は、文字列のパターンマッチングを記述するものです。ある文字列が特定の部分文字列を含むかどうかを調べたり、マッチした部分文字列を置換したり、ある条件に一致する部分文字列を文字列から抽出したりするために使用できます。

正規表現の詳細については、次のチュートリアルを参照してください:正規表現 - チュートリアル。

PHP で正規表現を使用するには、主に組み込み関数群を使用します。最も一般的に使用されるものは次のとおりです:

  • preg_match(): 文字列内でマッチするパターンを検索し、最初のマッチのみを返します。
  • preg_match_all(): 文字列内でマッチするパターンを検索し、すべてのマッチを返します。
  • preg_replace(): 文字列内でマッチするパターンを検索し、置換を行います。

preg_match() 関数

preg_match() 関数は、文字列内でマッチするパターンを検索し、最初のマッチのみを返すために使用されます。

preg_match(pattern, subject, matches)

パラメータの説明:

  • pattern:正規表現パターン。
  • subject:検索する文字列。
  • matches:オプションのパラメータで、マッチした結果を格納するために使用します。

例

<?php
$str = "Hello, World!";
$pattern = "/Hello/";
if (preg_match($pattern, $str, $matches)) {
    echo "マッチ成功!" . PHP_EOL;
    print_r($matches);
} else {
    echo "マッチしませんでした!";
}
?>

上記のコードの出力結果は次のとおりです:

匹配成功!
Array
(
    [0] => Hello
)

preg_match_all() 関数

preg_match_all() 関数は、文字列内でマッチするパターンを検索し、すべてのマッチを返すために使用されます。

preg_match_all(pattern, subject, matches)

パラメータの説明:

  • 文字列内でマッチするパターンを検索し、すべてのマッチを返すために使用されます。
  • pattern:正規表現パターン。
  • subject:検索する文字列。
  • matches:すべてのマッチ結果を格納する配列。

例

<?php
$str = "The cat and the hat";
$pattern = "/[aeiou]/";
if (preg_match_all($pattern, $str, $matches)) {
    echo "マッチした母音: " . implode(", ", $matches[0]);
} else {
    echo "マッチしませんでした!";
}
?>

上記のコードの出力結果は次のとおりです:

匹配的元音字母: e, a, a, e, a

preg_replace() 関数

preg_replace() 関数は、文字列内でマッチするパターンを検索し、置換するために使用されます。

preg_replace(pattern, replacement, subject)

パラメータの説明:

  • pattern:正規表現パターン。
  • replacement:置換する文字列。
  • subject:検索する文字列。

例

<?php
$str = "I love PHP";
$pattern = "/PHP/";
$replacement = "サンプル";
$new_str = preg_replace($pattern, $replacement, $str);
echo "置換後の文字列: " . $new_str;
?>

上記のコードの出力結果は次のとおりです:

替换后的字符串: I love サンプル

PCRE 関数

PHP では、PCRE 拡張機能を使用して文字列のパターンをマッチングできます。

関数説明
preg_filter 正規表現の検索と置換を実行します
preg_grep パターンにマッチする配列エントリを返します
preg_last_error 最後に実行された PCRE 正規表現が生成したエラーコードを返します
preg_match_all グローバルな正規表現マッチングを実行します
preg_match 正規表現マッチングを実行します
preg_quote 正規表現文字をエスケープします
preg_replace_callback_array 正規表現の検索を実行し、コールバックを使用して置換します
preg_replace_callback 正規表現の検索を実行し、コールバックを使用して置換します
preg_replace 正規表現の検索と置換を実行します
preg_split 正規表現によって文字列を分割します

PREG 定数

定数 説明 追加されたバージョン
PREG_PATTERN_ORDER 結果は「パターン」順に並べられます。preg_match_all() でのみ使用されます。つまり、$matches since
PREG_SET_ORDER 結果は「セット」順に並べられます。preg_match_all() でのみ使用されます。つまり、$matches  
PREG_OFFSET_CAPTURE 参照PREG_SPLIT_OFFSET_CAPTUREの説明。 4.3.0
PREG_SPLIT_NO_EMPTY このフラグは、preg_split() に空でない部分のみを返すように指示します。  
PREG_SPLIT_DELIM_CAPTURE このフラグは、preg_split() に括弧で囲まれた式のマッチ内容も同時にキャプチャするように指示します。 4.0.5
PREG_SPLIT_OFFSET_CAPTURE このフラグが設定されている場合、マッチした部分文字列の出現ごとにオフセットも返されます。これにより、返される配列の値が変わります。各要素は、マッチした部分文字列を0番目の要素とし、対象文字列に対するそのオフセットを1番目の要素とする配列になります。このフラグは preg_split() でのみ使用できます。 4.3.0
PREG_NO_ERROR マッチングエラーがない場合、preg_last_error() はこれを返します。 5.2.0
PREG_INTERNAL_ERROR PCRE 内部エラーが発生した場合、preg_last_error() はこれを返します。 5.2.0
PREG_BACKTRACK_LIMIT_ERROR バックトラック制限を超えた場合、preg_last_error() はこれを返します。 5.2.0
PREG_RECURSION_LIMIT_ERROR 再帰制限を超えた場合、preg_last_error() はこれを返します。 5.2.0
PREG_BAD_UTF8_ERROR 最後のエラーが不正な UTF-8 データ(UTF-8 モードの正規表現でのみ使用可能)によるものである場合、preg_last_error() はこれを返します。 5.2.0
PREG_BAD_UTF8_OFFSET_ERROR オフセットが有効な UTF-8 コードポイントと一致しない場合(UTF-8 モードの正規表現でのみ使用可能)、preg_last_error() はこれを返します。 5.3.0
PCRE_VERSION PCRE のバージョン番号とリリース日(例: "7.0 18-Dec-2006")。 5.2.4
その他の拡張機能