ホームページ バックエンド開発 PHPチュートリアル PHP_PHP チュートリアルで正規表現を使用して検索と置換を行う方法

PHP_PHP チュートリアルで正規表現を使用して検索と置換を行う方法

Jul 21, 2016 pm 03:07 PM
i match php 使用 マッチ 埋め込む 交換する 探す 通常 表現 行為

1. preg_match — 正規表現一致を実行します
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
検索件名とパターンで指定された正規表現との一致の場合、
pattern:
検索するパターン、文字列タイプ。
件名:
文字列を入力します。
matches:
パラメータのmatchesが指定されている場合、それが検索結果として入力されます。 $matches[0] には完全なパターンと一致するテキストが含まれ、$matches[1] には最初にキャプチャされたサブグループと一致するテキストが含まれます。
flags:
flags は次のフラグ値に設定できます: PREG_OFFSET_CAPTURE このフラグが渡されると、一致が発生するたびに文字列オフセット (ターゲット文字列を基準とした) が返されます。 注: これにより、matches パラメータに入力された配列が変更され、各要素が 0 番目の要素が一致した文字列、最初の要素がターゲット文字列 subject 内の一致した文字列のオフセットとなる文字列になります。
offset:
通常、検索は対象文字列の先頭から開始されます。オプションのパラメータ offset は、ターゲット文字列内の未知の点から開始する検索を指定するために使用されます (単位はバイト)。
戻り値:
preg_match() はパターンの一致数を返します。 preg_match() は最初の一致後に検索を停止するため、その値は 0 (一致なし) または 1 になります。 preg_match_all() はこれとは異なり、件名を最後まで検索します。 エラーが発生した場合、preg_match() は FALSE を返します。
例:

コードをコピー コードは次のとおりです:

/*
*パターン区切り文字の後の「i」マーク 大文字と小文字を区別しない検索です
*出力されます: 1
*/
echo preg_match("/,s*(php)/i", "私の意見では、PHP が最適な Web スクリプト言語です。");
echo "
". n ";
/*
* 出力: Array([0]=>, PHP [1]=>PHP)
*/
$matches = array();
preg_match("/,s*(php) )/i", "私の意見では、PHP は php が大好きな Web スクリプト言語です。", $matches);
print_r($matches);
echo "
"."n";
/*
* は出力されます: Array([0]=>Array([0]=>, PHP [1]=>11) [1]=>Array([0]=>PHP [ 1]=>13))
*/
preg_match("/,s*(php)/i", "私の考えでは、Web スクリプト言語として PHP が最適です。私は php が大好きです。", $matches, PREG_OFFSET_CAPTURE ) ;
print_r($matches);
echo "
"."n";
/*
*出力は次のとおりです:Array([0]=>Array([0]=>e php [ 1]=63) [1]=>Array([0]=>php [1]=>65))
*/
preg_match("/[,a-z]?s*(php)/ i" , "私の意見では、PHP は最適な Web スクリプト言語です。私は php が大好きです。", $matches, PREG_OFFSET_CAPTURE, 28);
print_r($matches);
echo "
"."n ";
?>

2.preg_match_all — グローバル正規表現一致を実行します
int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )
指定された正規表現パターンに一致するサブジェクト内のすべての一致結果を検索し、最初の一致が見つかった後、サブシーケンスは最後の一致位置検索から継続されます。 .
pattern:
文字列形式の検索するパターン。
件名:
文字列を入力します。
matches:
多次元配列、すべての一致結果を出力パラメータとして出力、配列のソートはフラグで指定されます。
flags:
は、次のタグと組み合わせて使用​​できます(PREG_PATTERN_ORDERとPREG_SET_ORDERは同時に使用できないことに注意してください)。ソートタグが指定されていない場合は、PREG_PATTERN_ORDERに設定されているとみなされます:
PREG_PATTERN_ORDER:
結果。完全なパターンのすべての一致を保存するには $matches[0] としてソートされ、$matches[1] では最初のサブグループのすべての一致が保存されます。
PREG_SET_ORDER:
結果は、$matches[0] には最初の一致で得られたすべての一致 (サブグループを含む) が含まれ、$matches[1] には 2 番目の一致で得られたすべての一致 (サブグループを含む) が含まれる配列として並べ替えられます。の上。
PREG_OFFSET_CAPTURE:
このフラグが渡された場合、見つかった各一致は、ターゲット文字列に対する相対的なオフセットを増加して返されます。 これにより、一致の各一致結果文字列要素が変更され、0 番目の要素が一致結果文字列で、最初の要素が件名内の一致結果文字列のオフセットとなる一致結果文字列になることに注意してください。
戻り値:
完全一致の数 (おそらく 0) を返します。エラーが発生した場合は FALSE を返します。
例:

コードをコピーします コードは次のとおりです:

/*
*将会出:2
*/
echo preg_match_all("/php/i", "私の意見では、PHP は最適な Web スクリプト言語です。私は php が大好きです", $一致);
echo "
"."n";
/*
*将会输出:Array([0]=>, PHP [1]=>PHP)
*/
$ matches = array();
preg_match("/[,a-z]?s*(php)/i", "私の考えでは、Web スクリプト言語として PHP が最適です。私は php が大好きです。", $matches);
print_r ($matches);
echo "
"."n";
/*
*将会输出:Array([0]=>Array([0]=>, PHP [1] =>e php) [1]=>Array([0]=>PHP [1]=>php))
*/
$matches = array();
preg_match_all("/[,a-z] ?s*(php)/i", "私の考えでは、PHP は php が大好きな Web スクリプト言語です。", $matches, PREG_PATTERN_ORDER);
print_r($matches);
echo "
/*
*将会输出:Array([0]=>Array([0]=>Array([0]=>, PHP [1]=>11) [1]=>Array([0]=>PHP [1]=>13)) [1]=>Array([0]=>Array([0]=>e php [1]) ]=>63) [1]=>Array([0]=>php [1]=>65)))
*/
$matches = array();
preg_match_all("/[,a-z ]?s*(php)/i", "私の見解では、PHP は最適な Web スクリプト言語です。私は php", $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
print_r($matches);
echo "
"."n";
/*
*Array([0]=>Array( [0]=>e php [1]=>63) [1]=>Array([0]=>php [1]=>65))
*/
$matches = array() ;
preg_match_all("/[,a-z]?s*(php)/i", "私の考えでは、Web スクリプト言語として PHP が最適です。私は php が大好きです。", $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE, 28);
print_r($matches);
echo "
"."n";
?>

3.preg_split — 通过一正则表达式分字文字列
array preg_split ( string $ pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
正表形式の分間隔文字列を通過します。
pattern:
検索用のモード、文字列形式。 subject:
入力文字列
limit:
指定されている場合、制限分割された子列は最大で制限内に限り、返される最後の子列にはすべての残りの部分が含まれます。limit 値は -1、0、または null の場合を表します。
flags:
flags は、次のフラグの組み合わせ (ビットまたは組み合わせで):
PREG_SPLIT_NO_EMPTY:設置
PREG_SPLIT_DELIM_CAPTURE:
このマークが設定されている場合、分割されたモード内のパケット番号表形式がキャプチャされて返されます。个标记被設置、出現するマッチングが返されるたびに、追加の文字列がオフセットされます。 注意: これにより、返される回数グループ内の各要素が 0 番目の要素から隔てられた子列に変更されます。第 1 の要素は、サブジェクト内にある子ストリングのオフセット量構成の数グループです。
戻り値:
使用パターン境界をサブジェクトがその後に取得した子ストリングの構成の数グループを返します。
代码如下:


/*
*将会输出:
*Array ( [0] =>私の主張では、[1] => Web スクリプト言語として最適です。 [2] が大好き => ) */$matches = array();print_r(preg_split("/php/i", "私の意見では、PHP は最適な Web スクリプト言語です。私は php が大好きです"));echo "< br/>"."n";
/*
*将会输出:
*Array ( [0] => 私の意見では、[1] => が Web スクリプト言語の選択です。私は php が大好きです。 )
*/
$matches = array();
print_r(preg_split("/php/i", "私の意見では、PHP は最適な Web スクリプト言語です。私は php が大好きです", 2));
echo "
"."n";
/*
*将会输出:
*Array ( [0] => 私の意見では、[1] => が Web スクリプト言語の選択です。 love )
*/
$matches = array();
print_r(preg_split("/php/i", "私の意見では、PHP が Web スクリプト言語の選択です。私は php が大好きです。", -1, PREG_SPLIT_NO_EMPTY)) ;
echo "
"."n";
?>


4.preg_quote — 正規表現文字のエスケープ
string preg_quote ( string $str [, string $delimiter = NULL ] )
preg_quote() は引数 str を受け取り、正規表現構文の各文字を追加します。前にバックスラッシュ。 これは通常、正規表現として照合する必要があるランタイム文字列がある場合に使用されます。
正規表現の特殊文字は次のとおりです: . + * ? [ ^ ] $ ( ) { } = : -
文字列
区切り文字が指定されている場合は、次のようになります。逃げた。これは通常、PCRE 関数で使用される区切り文字をエスケープするために使用されます。 / は最も一般的な区切り文字です。
戻り値:
エスケープされた文字列を返します。
例:


コードをコピーします コードは次のとおりです:
//この例では、アスタリスクの元の意味を維持するために preg_quote($word) が使用されています。正規表現の特別なセマンティクスでは使用されません。
$textbody = "この本は *とても* 見つけにくいです。";
$word = "*とても*";
$textbody = preg_replace ("/" . preg_quote($word) . "/", "< i>" . $word . "", $textbody);
//この本は *非常に* 見つかりにくいです。
echo htmlspecialchars($textbody ;パターン pattern に一致する要素の配列。
文字列形式の検索するパターン。
入力配列。 PREG_GREP_INVERT に設定すると、この関数は指定されたパターンの入力配列を返します。 pattern 一致しない要素で構成される配列
戻り値:
入力のキーを使用してインデックス付けされた配列を返します
例:

コードは次のとおりです:

$ array = array( "abc", "dd", "123", "123.22", "word123", "33.2", "0.22");
//浮動小数点数を含むすべての要素を返します
//出力: Array ( [3] = > 123.22 [5] => 33.2 [6] => 0.22 )
$fl_array = preg_grep("/^(d+)?.d+$/", $array);
print_r($fl_array) );
/ /浮動小数点数を含むすべての要素を返します
//出力: Array ( [0] => abc [1] => dd [2] => 123 [4] => word123 )
$ fl_array = preg_grep( "/^(d+)?.d+$/", $array, PREG_GREP_INVERT);
print_r($fl_array);
?>

6.preg_replace — 正規表現検索と置換を実行します
mixed preg_replace (mixed $pattern ,mixed $replacement ,mixed $subject [, int $limit = -1 [, int &$count ]] )
Searchパターンに一致する被写体の部分を抽出し、置換に置き換えます。
パターン:
検索するパターン。文字列または文字列の配列を指定できます。 この関数には、「e」 (PREG_REPLACE_EVAL) を含むいくつかの PCRE 修飾子を指定できます。
replacement:
置換する文字列または文字列の配列。このパラメータが文字列でパターンが配列の場合、すべてのパターンがこの文字列で置き換えられます。 pattern と replace が両方とも配列の場合、各パターンは、replacement の対応する要素で置き換えられます。置換の要素がパターンの要素よりも少ない場合、余分なパターンは空の文字列に置き換えられます。置換には後方参照 \n または (PHP 4.0.4 以降で利用可能) $n を含めることができますが、構文的には後者の方が優先されます。 このような各参照は、n 番目に一致するキャプチャ サブグループによってキャプチャされたテキストに置き換えられます。 n は 0 ~ 99 で、\0 と $0 は完全なパターン マッチング テキストを表します。 キャプチャ サブグループのシリアル番号のカウント方法は次のとおりです。キャプチャ サブグループを表す左括弧は、1 から開始して左から右に数えられます。置換にバックスラッシュを使用したい場合は、4 ("\\"、翻訳者の注釈: これは最初は PHP 文字列であるため、エスケープ後は 2 つになり、正規表現エンジンによってオリジナルと見なされます)バックスラッシュ)。
置換モードで作業しており、後方参照の後に別の数値を続ける必要がある場合 (例: 一致するパターンの直後に元の数値を追加する)、構文 \1 を使用して後方参照を記述することはできません。たとえば、\11 を指定すると、preg_replace() は、\1 後方参照の後に元の 1 が続くのか、それとも \11 後方参照の後に何も続くのかを理解できなくなります。 この場合の解決策は、${1}1 を使用することです。
これにより、別の $1 後方参照、別の source1 が作成されます。 e 修飾子を使用する場合、この関数は一部の文字 ('、"、および NULL) をエスケープし、後方参照の置換を実行します。これが完了するとき、後方参照が一重引用符または二重引用符なしで解決されていることを確認してください。構文エラー (for例: 'strlen('$1')+strlen("$2")')。置換が完了すると、
エンジンは結果の文字列を次のように扱うため、PHP の文字列構文と eval 構文に準拠していることを確認してください。 PHP コードは eval メソッドを使用して値を評価し、置換に含まれる最終文字列として返します。
subject:
検索および置換される文字列または文字列の配列 subject が配列の場合、検索して置換します。 1 つの要素に対して実行され、戻り値も配列になります。
limit:
パターンごとの置換の最大数。
count:
指定されている場合は、それが使用されます。完了した置換の数が入ります。
戻り値:
サブジェクトが配列の場合、preg_replace() は配列を返し、一致しない場合は置換されたサブジェクトを返します。件名は変更されていません。エラーが発生した場合は、NULL が返されます。
例:
後方参照を使用して値を追跡します。元のテキスト:
コードをコピーしますコードは次のとおりです:

$string = 'April 15 , 2003';
/*
*w+ 文字を 1 回以上繰り返します
*d+ 数字を 1 回以上繰り返します
*大文字と小文字を区別しません
*/
$pattern = '/(w+) ( d+), (d+) /i';
/*
*$0 完全なパターン マッチング テキスト
*${1}1 最初の括弧内のパターン マッチング テキストとそれに続く 1
*\3 3 番目の括弧内のパターン マッチング テキスト
* /
$replacement = '$0:
${1}1,\3';
echo preg_replace($pattern, $replacement, $string);
?>

preg_replace( )インデックスベースの配列:
コードをコピーします コードは次のとおりです:

$string = '足の速い茶色のキツネは怠惰な犬を飛び越えました。';
$patterns = array();
$patterns [ 0] = '/quick/';
$patterns[1] = '/brown/';
$patterns[2] = '/fox/';
$replacements = array();
$replacements[2] = 'bear';
$replacements[1] = 'black';
$replacements[0] = 'slow';
//出力: 黒クマはゆっくりと怠惰な犬を飛び越えました。
echo preg_replace($patterns, $ replaces, $string);
//パターンと置換内容をキーでソートすることで、望ましい結果を得ることができます。
ksort($patterns);
ksort($replacements);
//ゆっくりとジャンプしたツキノワグマは、怠惰な犬上の出力
echo preg_replace($patterns, $replacements, $string);

いくつかの値を置き換えます:
コードをコピーします コードは次のとおりです:

$patterns = array ('/(19|20)(d{2})-(d{1,2})-(d{1,2})/',
s *{ (w+)}s*=/');
$replace = array ('3/4/12', '$1 =');
echo preg_replace($patterns, $replace, '{startDate} = 1999 -5- 27');
?>

修飾子 'e' を使用します:
コードをコピーします コードは次のとおりです:

$html_body = "

";
// 出力は次のとおりです:

hello


echo htmlspecialchars(preg_replace("/(]*>)/e",
"'\1'.strtoupper('\2').'\3'",


空白文字を削除します:


コードをコピーします コードは次のとおりです:
$str = 'foo o';
$str = preg_replace('/ss+/', ' ', $ str);
// 'foo o' に変更します
echo $str;
?>


パラメータ count を使用します:


コードをコピーします コードは次のとおりです:
$ count = 0;
echo preg_replace(array('/d/', '/s/'), '*', 'xp 4 to', -1 , $count);
//echo preg_replace(' /d|s/ と同等', '', 'xp 4 to', -1 , $count);
echo $count; //3
?>



7.preg_replace_callback — 正規表現検索を実行し、コールバックを使用して置換します
mixed preg_replace_callback (mixed $pattern , callable $callback ,mixed $subject [, int $limit = -1 [, int &$count ]] )
この関数の動作に加えて、コールバック置換を指定できます置換文字列の計算を実行し、それ以外の点では preg_replace() と同等です。
pattern:
検索するパターン。文字列または文字列の配列にすることができます。
callback:
置換が必要になるたびに呼び出されるコールバック関数。呼び出し時に関数によって取得されるパラメータは、サブジェクトから照合された結果です。コールバック関数は、実際に置換に関与する文字列を返します。
多くの場合、コールバック関数は preg_replace_callback() という 1 か所でのみ使用する必要があります。この場合、匿名関数を使用して、 preg_replace_callback() が呼び出されたときに匿名関数をコールバックとして定義できます。 こうすることで、すべての呼び出し情報を同じ場所に保持し、他では使用されていないコールバック関数名で関数の名前空間を汚すことがなくなります。
件名:
検索および置換する対象の文字列または文字列配列。
limit:
パターンごとの各対象文字列の置換の最大数。 デフォルトは -1 (制限なし) です。
count:
指定した場合、この変数には置換が実行された回数が設定されます。
例:
preg_replace_callback() と create_function():


コードをコピーします コードは次のとおりです:
// テキスト内の年を 1 年増やします。
$text = "エイプリルフールは 04/01/2002n";
$text.= "最後のクリスマスは 12/24/2001n";
// コールバック関数
function next_year($matches)
{
// 通常: $matches [0] が完了しました Match
// $matches[1] は最初にキャプチャされたサブグループの一致です
// 以下同様です
return $matches[1].($matches[2]+1);
}
/ **
*出力は次のとおりです:
*エイプリルフールは 2003 年 4 月 1 日です
*前回のクリスマスは 2002 年 12 月 24 日です
*/HECHO PREG_REPLACE_CALLBACK (
"| (D {2}/d {2}/) (d {4}) |" "来年",
$ Text); 2}/d {2}/) (d {4}) |", ",
create_function (
'$ 一致',
' return $ 一致 [1]。($ 一致 [2]+ 1);'
)、
$text);

www.bkjia.com本当http://www.bkjia.com/PHPjc/327579.html技術記事 1. preg_match — 正規表現の一致を実行します int preg_match ( string $pattern , string $subject [, array lt;?php /* *パターン区切り文字の後の「i」マークは大文字と小文字を区別しません...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles