検索
ホームページバックエンド開発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怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

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

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

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

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

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。