検索
ホームページバックエンド開発PHPの問題PHPで定期的な置換コンテンツを実装する方法

通常のコンテンツ置換を実装する

php メソッド: 最初に PHP サンプル ファイルを作成し、次に文字列のセットを定義し、最後に "preg_replace('/http\:\/\/www\...\.com \/\_blog\//'...)" 正規表現でコンテンツを置き換えることができます。

PHPで定期的な置換コンテンツを実装する方法

#この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、Dell G3 コンピューター。

PHP 関数 preg_replace() すべての修飾文字列の定期的な置換

PHP preg_replace() の通常の置換。JavaScript の通常の置換である PHP preg_replace() とは異なります。 デフォルトでは、 シンボルが条件に一致する すべての要素 が置き換えられます。

preg_replace (正则表达式, 替换成, 字符串, 最大替换次数【默认-1,无数次】, 替换次数)

ほとんどの言語の正規表現は似ていますが、微妙な違いもあります。

PHP 正規表現

#通常の文字通常の説明\次の文字を特殊文字としてマークします。またはリテラル文字、後方参照、または 8 進エスケープ文字。たとえば、「\n」は文字「n」と一致します。 「\\n」は改行文字と一致します。シーケンス「\\」は「\」に一致し、「\(」は「(」に一致します。^ は入力文字列の先頭に一致します。 RegExp オブジェクトの Multiline プロパティ、^ は、「\n」または「\r」の後の位置とも一致します。$ は、入力文字列の終了位置と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は "\n" または "\r" の前の位置にも一致します。先行部分式を 0 回または複数回指定します。たとえば、zo* は "z" と "zoo" に一致します。* は {0,} と同等です。前のサブ式と 1 回以上一致します。たとえば、「zo」は「zo」と「zoo」に一致しますが、「z」には一致しません。{1,} と同等です。## ? {n}{n,}{n,m}?##(パターン) パターンに一致し、この一致を取得します。取得された一致は、VBScript の SubMatches コレクションを使用し、VBScript の $0...$9 属性を使用して、生成された Matches コレクションから取得できます。 JScript 。括弧文字と一致させるには、「\(」または「\)」を使用します。 (?:pattern) パターンに一致しますが、一致結果は取得されません。これは、これは非取得一致であり、後で使用するために保存されないことを意味します。 。これは、文字「(|)」を使用してパターンの一部を結合する場合に便利です。たとえば、「industr(?:y|ies)」は「industry|industries」よりも単純な式です。 (?=パターン)、文字列一致パターンの先頭にある検索文字列と一致します。これは非フェッチ一致です。つまり、後で使用するために一致をフェッチする必要はありません。たとえば、「Windows(?=95|98|NT|2000)」は、「Windows2000」の「Windows」と一致しますが、「Windows3.1」の「Windows」と一致することはできません。プリフェッチでは文字は消費されません。つまり、一致が発生した後、次の一致の検索は、プリフェッチを含む文字の後に開始されるのではなく、最後の一致の直後に開始されます。 (?!pattern)、パターンに一致しない文字列の先頭にある検索文字列に一致します。 。これは非フェッチ一致です。つまり、後で使用するために一致をフェッチする必要はありません。たとえば、「Windows(?!95|98|NT|2000)」は、「Windows3.1」の「Windows」と一致しますが、「Windows2000」の「Windows」と一致することはできません。 ##(?x|y x または y に一致します。たとえば、「z|food」は「z」または「food」と一致します。 「(z|f)ood」は「zood」または「food」と一致します。 [xyz]キャラクターコレクション。含まれている文字のいずれかと一致します。たとえば、「[abc]」は「plain」の「a」と一致します。
先行する部分式と 0 回または 1 回一致します。たとえば、「do(es)?」は「does」または「does」内の「do」と一致します。? は {0,1} と同等です。
n は負ではない整数です。特定の回数 n 回一致します。たとえば、「o{2}」は「Bob」と一致することはできません。 " "o" ですが、"food" 内の 2 つの o と一致する可能性があります。
n は負でない整数です。少なくとも n 回一致します。たとえば、「o{2,}」は「Bob」の「o」とは一致しませんが、「foooood」のすべての「o」には一致します。「o{1,}」は「o 」と同等です。「o{ 0, }" は "o*" と同等です。
m および n は負ではない整数であり、n
この文字の直後に他のリミッター (*、、、?) が続く場合。 , {n} , {n,}, {n,m})、マッチング モードは非グリーディです。非グリーディ モードは可能な限り少ない検索文字と一致しますが、デフォルトのグリーディ モードはできるだけ多くの検索文字と一致します。可能な限り検索された文字列 文字列。たとえば、文字列「oooo」の場合、「o?」は 1 つの「o」に一致し、「o」はすべての「o」に一致します。 ##.Point 「\n」を除く任意の 1 文字と一致します。「\n」を含む任意の文字と一致するには、「[\s\S]」のようなパターンを使用します。
前方正の事前検索
前方否定前検索
##(? リバース ポジティブ プリチェックはフォワード ポジティブ プリチェックと似ていますが、方向が逆です。たとえば、「(?
逆ネガティブ事前チェックは、順ネガティブ事前チェックと似ていますが、方向が逆です。たとえば、「(?
[^xyz] 負の値の文字セット。含まれていない任意の文字と一致します。たとえば、「[^abc]」は「plain」の「plin」と一致します。
[a-z] 文字範囲。指定された範囲内の任意の文字と一致します。たとえば、「[a-z]」は、「a」から「z」の範囲内の任意の小文字の英字と一致します。注: ハイフンが文字グループ内にあり、2 つの文字の間にある場合のみ、文字の範囲を表すことができます。文字グループの先頭にある場合は、ハイフン自体を表すことしかできません。
[^a-z] 負の文字範囲。指定された範囲内にない任意の文字と一致します。たとえば、「[^a-z]」は、「a」から「z」の範囲にない任意の文字に一致します。
\b 単語とスペースの間の位置を指す単語境界に一致します。たとえば、「er\b」は「never」の「er」と一致しますが、「verb」の「er」とは一致しません。
\B 単語以外の境界に一致します。 「er\B」は「動詞」の「er」と一致しますが、「never」の「er」とは一致しません。
\cx x で指定された制御文字と一致します。たとえば、\cM は Control-M または復帰文字と一致します。 x の値は、A ~ Z または a ~ z のいずれかでなければなりません。それ以外の場合は、c をリテラルの「c」文字として扱います。
\d 数字と一致します。 [0-9]に相当します。
\D 数字以外の文字と一致します。 [^0-9] に相当します。
\f フォーム フィード文字と一致します。 \x0c および \cL に相当します。
\n 改行文字と一致します。 \x0a および \cJ に相当します。
\r 復帰文字と一致します。 \x0d および \cM に相当します。
\s スペース、改行、タブ、フォーム フィード、中国語の全角スペースなどを含む任意の空白文字と一致します。 [ \f\r\n\t\v] と同等。
\S 空白以外の任意の文字と一致します。 [^ \f\r\n\t\v] と同等。
\t タブ文字と一致します。 \x09 および \cI に相当します。
\v 垂直タブ文字と一致します。 \x0b および \cK に相当します。
\w アンダースコアを含む任意の単語文字と一致します。 「[A-Za-z0-9_]」に相当します。
\W 単語以外の文字に一致します。 「[^A-Za-z0-9_]」と同等。
\xn n と一致します。n は 16 進数のエスケープ値です。 16 進エスケープ値は正確に 2 桁の長さである必要があります。たとえば、「\x41」は「A」と一致します。 「\x041」は「\x04&1」と同等です。 ASCII エンコーディングは正規表現で使用できます。
\num num と一致します。ここで、num は正の整数です。取得した一致への参照。たとえば、「(.)\1」は、連続する 2 つの同一の文字と一致します。
\n 8 進エスケープ値または後方参照を識別します。 \n の前に少なくとも n 個のフェッチされた部分式がある場合、n は後方参照です。それ以外の場合、n が 8 進数 (0 ~ 7) の場合、n は 8 進数のエスケープ値になります。
\nm 8 進エスケープ値または後方参照を識別します。 \nm の前に少なくとも nm 個の get 部分式がある場合、nm は後方参照です。 \nm の前に少なくとも n が取得される場合、n は後方参照であり、その後にリテラル m が続きます。前述の条件がいずれも満たされず、n と m が両方とも 8 進数 (0 ~ 7) である場合、\nm は 8 進数のエスケープ値 nm と一致します。
\nml n が 8 進数 (0 ~ 7) で、m と l が両方とも 8 進数 (0 ~ 7) の場合、8 進数のエスケープと一致します。値nml。
\un n と一致します。n は 4 桁の 16 進数で表される Unicode 文字です。たとえば、\u00A9 は著作権記号 (©) に一致します。

上表是正则表达式比较全面的解释,而商标中的正则字符都有特殊含义,已经不再代表原字符含义。如正则表达式中“+”不代表加号,而是代表匹配一次或多次。而如果想要让“+”表示加号,则需要在其前面加上“\”转义,也就是用“\+”表示加号。

【推荐学习:《PHP视频教程》】

1+1=2  正则表达式是: 1\+1=2
而正则表达式 1+1=2 可以代表,多个1=2,即:
11=2     正则表达式:1+1=2
111=2    正则表达式:1+1=2
1111=2   正则表达式:1+1=2
……

也就是说所有正则字符都有特定含义,如果需要再用来表示原字符含义,就需要在前面加“\”转义,即使非正则字符,用“\”转义也是没有问题的。

1+1=2  正则表达式也可以是: \1\+\1\=\2
对所有字符都转义,但是这种不建议使用。 

而正则表达式必须要使用定界符包围起来,在JavaScript中定界符是“/”,而在PHP中,比较常见的是用“/”定界,也可以用“#”定界,而且外面还需要用引号包围起来。

如果正则表达式包含这些定界符,您就需要对这些字符进行转义。

 

PHP 正则表达式定界符

大多数语言的正则表达式都是由“/”作为定界符的,而在PHP中,还可以使用“#”定界,如果字符串中包含大量“/”字符,在使用“/”定界的时候,就需要对这些“/”转义,而使用“#”就不需要转义,更简洁。

<?php
$subject=&#39;钱运来PHP博客的网址是 http://blog.snsgou.com/_blog/ ,你能把这个网址替换成正确的网址吗?&#39;;

// 上面的要求就是把 http://blog.snsgou.com/_blog 替换成 http://blog.snsgou.com/

// . : - 都是正则符号,所以需要转义,而 / 是定界符,如果字符串中包含 / 定界符,就需要转义

echo preg_replace(&#39;/http\:\/\/www\.qianyunlai\.com\/\_blog\//&#39;, &#39;http://blog.snsgou.com/&#39;, $subject);

echo &#39;<br />&#39;;

// 在 #作为定界符,/ 就不再是定界符的含义,就不需要转义了。
echo preg_replace(&#39;#http\://www\.qianyunlai\.com/\_blog/#&#39;, &#39;http://blog.snsgou.com/&#39;, $subject);

// 上面两条输出结果都一样,【钱运来PHP博客的网址是 http://blog.snsgou.com/,你能把这个网址替换成正确的网址吗?】

?>

通过上面的两条PHP 正则替换代码我们可以发现,如果正则语句中包含大量“/”,无论使用“/” 还是 “#”做定界符都是可以的,但是使用“#”能让代码看起来更简洁。但还是建议您保持使用“/”作为定界符,因为在JavaScript等语言中,只能使用“/”作为定界符,这样写起来可以形成习惯,贯通于其他语言中。

PHP 正则表达式修饰符

修饰符被放在PHP正则表达式定界符“/”之后,在正则表达式尾部引号之前。

i 忽略大小写,匹配不考虑大小写

m 多行独立匹配,如果字符串不包含[\n]等换行符就和普通正则一样。

s 设置正则符号 . 可以匹配换行符[\n],如果没有设置,正则符号.不能匹配换行符\n。

x 忽略没有转义的空格

eval() 对匹配后的元素执行函数。

A 前置锚定,约束匹配仅从目标字符串开始搜索

D 锁定$作为结尾,如果没有D,如果字符串包含[\n]等换行符,$依旧依旧匹配换行符。如果设置了修饰符m,修饰符D 就会被忽略。

S 对非锚定的匹配进行分析

U 非贪婪,如果在正则字符量词后加“?”,就可以恢复贪婪

X 打开与perl 不兼容附件

u 强制字符串为UTF-8编码,一般在非UTF-8编码的文档中才需要这个。建议UTF-8环境中不要使用这个。

如果您熟悉JavaScript 的正则表达式,或许一定熟悉JavaScript 正则表达式的修饰符“g”,代表匹配所有符合条件的元素。而在PHP 正则替换中,是匹配所有符号条件的元素,所以不存在JavaScript 修饰符“g”。

PHP 正则中文和忽略大小写

PHP preg_replace() 是区分大小写的,同时只能匹配ASCII编码内的字符串,如果需要匹配不区分大小写和中文等字符需要添加相应的修饰符 i 或 u。

<?php
$subject=&#39;钱运来PHP博客网址:http://www.QIanyunlai.com/&#39;;

// 大小写不同,输出【钱运来PHP博客网址:http://www.QIanyunlai.com/】
echo preg_replace(&#39;/QIAN/&#39;, &#39;qian&#39;, $subject);
echo &#39;<br />&#39;;

// 忽略大小写,执行替换输出【钱运来PHP博客网址:http://blog.snsgou.com/】
echo preg_replace(&#39;/QIAN/i&#39;, &#39;qian&#39;, $subject);
echo &#39;<br />&#39;;

// 强制 UTF-8中文,执行替换,输出【钱运来PHP博客:http://www.QIanyunlai.com/】
echo preg_replace(&#39;/网址/u&#39;, &#39;&#39;, $subject);
?>

大小写和中文在PHP中都是敏感的,但是在JavaScript正则中,只对大小写敏感,忽略大小写也是通过修饰符 i 作用的,但是JavaScript 不需要告知是否是UTF-8中文等特殊字符,直接可以匹配中文。

PHP 正则换行符实例

PHP 正则表达式在遇到换行符时,会将换行符当做字符串中间一个普通字符。而通用符号.不能匹配\n,所以遇到带有换行符的字符串正则会有很多要点。

<?php
$subject="snsgou.com\nIS\nLOVING\nYOU";

// 想要把上面$subject 替换成snsgou.com

echo preg_replace(&#39;/^[A-Z].*[A-Z]$/&#39;, &#39;&#39;, $subject), &#39;<br />&#39;;
// 这个正则表达式是,匹配只包含\w的元素,$subject 是以q开头,符合[A-Z],而且结尾是m,也符合[A-Z]。.无法匹配\n
// 输出【snsgou.com IS LOVEING YOU】

echo preg_replace(&#39;/^[A-Z].*[A-Z]$/s&#39;, &#39;&#39;, $subject), &#39;<br />&#39;;
// 这个用修饰符s,也就是 . 可以匹配 \n 了,所以整句匹配,输出空
// 输出【】

echo preg_replace(&#39;/^[A-Z].*[A-Z]$/m&#39;, &#39;&#39;, $subject), &#39;<br />&#39;;
// 这里使用了修饰符,将\n作为多行独立匹配。也就等价于:
/*
$preg_m = preg_replace(&#39;/^[A-Z].*[A-Z]$/m&#39;, &#39;&#39;, $subject);

$p = &#39;/^[A-Z].*[A-Z]$/&#39;;
$a = preg_replace($p, &#39;&#39;, &#39;snsgou.com&#39;);
$b = preg_replace($p, &#39;&#39;, &#39;IS&#39;);
$c = preg_replace($p, &#39;&#39;, &#39;LOVING&#39;);
$d = preg_replace($p, &#39;&#39;, &#39;YOU&#39;);

$preg_m === $a . $b . $c . $d;
*/
// 输出【snsgou.com】
?>

以后您在使用PHP 抓取某个网站内容,并用正则批量替换的时候,总无法避免忽略获取的内容包含换行符,所以在使用正则替换的时候一定要注意。

PHP 正则匹配执行函数

PHP 正则替换可以使用一个修饰符e,代表 eval() 来执行匹配后的内容某个函数。

<?php
$subject=&#39;钱运来PHP博客网址:http://www.qianYUNlai.com/&#39;;

// 将上面网址转为小写

echo preg_replace(&#39;/(http\:[\/\w\.\-]+\/)/e&#39;, &#39;strtolower("$1")&#39;, $subject);
// 使用修饰符e之后,就可以对匹配的网址执行PHP 函数 strtolower() 了
// 输出 【钱运来PHP博客网址:http://blog.snsgou.com/】
?>

根据上面代码,尽管匹配后的函数 strtolower() 在引号内,但是依旧会被eval()执行。

正则替换匹配变量向后引用

如果您熟悉JavaScript,一定对$1 $2 $3 …… 等向后引用比较熟悉,而在 PHP 中这些也可以被当作向后引用参数。而在PHP中,还可以使用 \1 \\1 来表示向后引用。

向后引用的概念就是匹配一个大片段,这个正则表达式内部又被用括号切割成若干小匹配元素,那么每个匹配元素就被按照小括号序列用向后引用代替。

<?php
$subject=&#39;钱运来PHP博客网址:http://blog.snsgou.com/,你yun-lai了吗?&#39;;

echo preg_replace(&#39;/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/&#39;, &#39;$1&#39;, $subject);
echo preg_replace(&#39;/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/&#39;, &#39;\1&#39;, $subject);
echo preg_replace(&#39;/.+(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+/&#39;, &#39;\\1&#39;, $subject); // 通常用这个
echo &#39;<br />&#39;;
// 上面三个都是输出 【http://blog.snsgou.com/】

echo preg_replace(&#39;/^(.+)网址:(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+$/&#39;, &#39;栏目:$1<br>网址:$2<br>商标:$3&#39;, $subject);
/*
栏目:钱运来PHP博客
网址:http://blog.snsgou.com/
商标:yun-lai
*/
echo &#39;<br />&#39;;

// 括号中括号,外面括号先计数
echo preg_replace(&#39;/^((.+)网址:(http\:[\w\-\/\.]+\/)[^\w\-\!]+([\w\-\!]+).+)$/&#39;, &#39;原文:$1<br>栏目:$2<br>网址:$3<br>商标:$4&#39;, $subject);
/*
原文:钱运来PHP博客网址:http://blog.snsgou.com/,你yun-lai了吗?
栏目:钱运来PHP博客
网址:http://blog.snsgou.com/
商标:yun-lai
*/
?>

 

以上がPHPで定期的な置換コンテンツを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
酸とベースデータベース:違いとそれぞれを使用するタイミング。酸とベースデータベース:違いとそれぞれを使用するタイミング。Mar 26, 2025 pm 04:19 PM

この記事では、酸とベースのデータベースモデルを比較し、その特性と適切なユースケースを詳述しています。酸は、財務およびeコマースアプリケーションに適したデータの整合性と一貫性を優先し、ベースは可用性に焦点を当て、

PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。PHPセキュアファイルアップロード:ファイル関連の脆弱性の防止。Mar 26, 2025 pm 04:18 PM

この記事では、コードインジェクションのような脆弱性を防ぐために、PHPファイルのアップロードを確保することについて説明します。ファイルタイプの検証、セキュアストレージ、およびアプリケーションセキュリティを強化するエラー処理に焦点を当てています。

PHP入力検証:ベストプラクティス。PHP入力検証:ベストプラクティス。Mar 26, 2025 pm 04:17 PM

記事では、組み込み関数、ホワイトリストアプローチ、サーバー側の検証などの手法に焦点を当てたセキュリティを強化するためのPHP入力検証のベストプラクティスについて説明します。

PHP APIレート制限:実装戦略。PHP APIレート制限:実装戦略。Mar 26, 2025 pm 04:16 PM

この記事では、Token BucketやLeaky BucketなどのアルゴリズムやSymfony/Rate-Limiterなどのライブラリを使用するなど、PHPでAPIレート制限を実装するための戦略について説明します。また、監視、動的に調整されたレートの制限、および手をカバーします

PHPパスワードハッシュ:password_hashおよびpassword_verify。PHPパスワードハッシュ:password_hashおよびpassword_verify。Mar 26, 2025 pm 04:15 PM

この記事では、パスワードを保護するためにPHPでpassword_hashとpassword_verifyを使用することの利点について説明します。主な議論は、これらの関数が自動塩の生成、強力なハッシュアルゴリズム、およびSecurを通じてパスワード保護を強化するということです

OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。OWASPトップ10 PHP:共通の脆弱性を説明し、軽減します。Mar 26, 2025 pm 04:13 PM

この記事では、PHPおよび緩和戦略におけるOWASPトップ10の脆弱性について説明します。重要な問題には、PHPアプリケーションを監視および保護するための推奨ツールを備えたインジェクション、認証の壊れ、XSSが含まれます。

PHP XSS予防:XSSから保護する方法。PHP XSS予防:XSSから保護する方法。Mar 26, 2025 pm 04:12 PM

この記事では、PHPでのXSS攻撃を防ぐための戦略について説明し、入力の消毒、出力エンコード、セキュリティを向上させるライブラリとフレームワークの使用に焦点を当てています。

PHPインターフェイスvs抽象クラス:それぞれを使用する時期。PHPインターフェイスvs抽象クラス:それぞれを使用する時期。Mar 26, 2025 pm 04:11 PM

この記事では、PHPでのインターフェイスと抽象クラスの使用について説明し、それぞれをいつ使用するかに焦点を当てています。インターフェイスは、無関係なクラスや複数の継承に適した、実装なしで契約を定義します。抽象クラスは共通の機能を提供します

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ヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

DVWA

DVWA

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール