指定された正規表現パターンに一致するサブジェクト内のすべての一致結果を検索し、最初の一致が見つかった後、サブシーケンスは最後の一致位置検索から継続されます。 .
は、次のタグと組み合わせて使用できます(PREG_PATTERN_ORDERとPREG_SET_ORDERは同時に使用できないことに注意してください)。ソートタグが指定されていない場合は、PREG_PATTERN_ORDERに設定されているとみなされます:
結果。完全なパターンのすべての一致を保存するには $matches[0] としてソートされ、$matches[1] では最初のサブグループのすべての一致が保存されます。
結果は、$matches[0] には最初の一致で得られたすべての一致 (サブグループを含む) が含まれ、$matches[1] には 2 番目の一致で得られたすべての一致 (サブグループを含む) が含まれる配列として並べ替えられます。の上。
このフラグが渡された場合、見つかった各一致は、ターゲット文字列に対する相対的なオフセットを増加して返されます。 これにより、一致の各一致結果文字列要素が変更され、0 番目の要素が一致結果文字列で、最初の要素が件名内の一致結果文字列のオフセットとなる一致結果文字列になることに注意してください。
コードをコピーします コードは次のとおりです:
/*
*将会出: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("/( ? )(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);
http://www.bkjia.com/PHPjc/327579.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/327579.html技術記事 1. preg_match — 正規表現の一致を実行します int preg_match ( string $pattern , string $subject [, array lt;?php /* *パターン区切り文字の後の「i」マークは大文字と小文字を区別しません...