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

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

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

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 ""."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) . "/", "" . $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("/( ? )(w+)([^>]*>)/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 までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン