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 "マッチしませんでした!";
}
?>
$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 "マッチしませんでした!";
}
?>
$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;
?>
$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 |