ホームページ  >  記事  >  バックエンド開発  >  PHP規則性の内容概要(詳細)

PHP規則性の内容概要(詳細)

不言
不言転載
2019-02-15 12:00:205280ブラウズ

この記事の内容は、PHP の通常コンテンツを要約 (詳しく) したものであり、一定の参考価値がありますので、困っている方は参考にしていただければ幸いです。

1. 普段の基礎知識

行ロケーター (^ と $)

行ロケーターは、文字列の境界を記述するために使用されます。 「$」は行の終わりを表します。「^」は行の始まりを表します。たとえば、「^de」は de で始まる文字列を表し、「de$」は de で終わる文字列を表します。

単語区切り文字

文字列「グリルとボディ」に an が存在するかどうかなど、単語を検索する場合、それが一致する場合、an は間違いなく OK であることは明らかです。文字列「グリルとボディ」が一致します。単語の一部ではなく単語と一致させるにはどうすればよいですか?このとき、単語区切り文字 \b を使用できます。
\ban\b 「グリルとボディ」を一致させようとすると、一致できないことを示すメッセージが表示されます。
もちろん、大文字の \B もあります。これは \b の正反対の意味です。一致する文字列は完全な単語であることはできませんが、他の単語または文字列の一部となります。 \Ban\B など。

またはを表す文字 (|) を選択します。

またはを表す文字を選択します。たとえば、Aa|aA は Aa または aA を意味します。 「[]」と「|」の使用の違いは、「[]」は 1 文字のみと一致するのに対し、「|」は任意の長さの文字列と一致できることです。 「[]」を使用する場合は、a または b または c または d を表す [a-d] のように、接続文字「-」と一緒に使用されることがよくあります。

文字の除外、操作の除外

正規表現では、一致しない文字を除外するために「^」を指定します。^ は通常 [] の中に置かれます。たとえば、[^1-5] の場合、この文字は 1 から 5 までの数字ではありません。

修飾子 (?* {n, m})

修飾子は主に、各文字列の出現数を制限するために使用されます。

###意味### ? #*ゼロ回以上1 回以上 {n}n回{n,}少なくともn回{n,m}n から m 回たとえば、(D) は 1 つ以上の D
修飾文字
ゼロまたは 1 回

ドット演算子を表します

任意の文字 (改行文字を除く) と一致します

式内のバックスラッシュ (\)

式内のバックスラッシュには、エスケープや事前定義された文字セットの指定、アサーションの定義、非表示の表示など、複数の意味があります。印刷可能な文字。

エスケープ文字

エスケープ文字は主に一部の特殊文字を通常の文字に変換します。一般的に使用される特殊文字には、「.」、「?」、「\」などが含まれます。

事前定義された文字セットを指定します

Characters ###意味### \d任意の 10 進数 [0-9]\D10 進数以外の任意の数値 \s任意の空白文字 (スペース、ラインフィード、フォームフィード、キャリッジリターン、文字)\S空白以外の任意の文字\w任意の単語文字\W単語以外の文字
#印刷できない文字を表示する

文字

###意味### \a\bバックスペース\fページ変更\n改行\r ###入力### \t括弧文字 ()正規表現における括弧の主な機能は次のとおりです。例: (my|your)baby、"()" がない場合、| は my または yourbaby のいずれかに一致します。括弧を使用すると、mybaby または yourbaby に一致します。 簡単に後方参照できるグループ
###警察を呼んで下さい###
###キャラクター###
( などの修飾子を変更します) |, *, ^) スコープ
パターン修飾子

パターン修飾子の役割は、パターンを設定すること、つまり、正規表現をどのように使用するかを設定することです。説明する。 php の主なパターンは次のとおりです。


Modifier

イラスト

###############私###

大文字と小文字を無視する

m

複数テキストモードs単一行テキストモード ###バツ### 空白文字を無視する

U 遅延モード (デフォルトの貪欲モードは記述しないでください)

2. 一般的に使用される PHP の通常の関数と例

a. preg_grep() 関数

preg_grep 関数は、パターンに一致する配列エントリを返します。

構文

array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )

パターン pattern に一致する、指定された配列入力内の要素で構成される配列を返します。

パラメータの説明:

  • $pattern: 文字列形式の検索対象のパターン。

  • #$input: 入力配列。

  • $flags: PREG_GREP_INVERT に設定すると、この関数は、指定されたパターン pattern に一致しない入力配列内の要素の配列を返します。

指定された一致する要素を配列内で返します:

<?php
$array = array(1, 2, 3.4, 53, 7.9);
// 返回所有包含浮点数的元素
$fl_array = preg_grep("/^(\d+)?\.\d+$/", $array);
print_r($fl_array);
?>

実行結果は次のとおりです:

Array
(
    [2] => 3.4
    [4] => 7.9
)

preg_grep は配列内の浮動小数点数のみを返すことがわかります。

b.preg_match() 関数

PHP 正規表現 (PCRE)

preg_last_error 関数は、正規表現の一致を実行するために使用されます。

構文

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

パターンで指定された正規表現と一致する件名を検索します。

パラメータの説明:

$pattern: 文字列形式の検索対象のパターン。

$件名: 入力文字列。

$matches: パラメータ一致が指定されている場合、それが検索結果として入力されます。 $matches[0] には完全なパターンと一致するテキストが含まれ、$matches[1] には最初にキャプチャされたサブグループと一致するテキストが含まれます。

$flags: フラグは次のフラグ値に設定できます:

PREG_OFFSET_CAPTURE: このフラグが渡された場合、文字列オフセット (ターゲット文字列を基準とした)。注: これにより、matches パラメーターに入力された配列が変更され、各要素が 0 番目の要素が一致した文字列、最初の要素がターゲット文字列サブジェクト内の一致した文字列のオフセットとなる文字列になります。

offset: 通常、検索は対象文字列の先頭から開始されます。オプションのパラメータ offset は、ターゲット文字列内の未知の点から開始する検索を指定するために使用されます (単位はバイト)。

戻り値

パターンの一致数を返します。 preg_match() は最初の一致後に検索を停止するため、その値は 0 (一致なし) または 1 になります。 preg_match_all() は、サブジェクトを最後まで検索するという点でこれとは異なります。エラーが発生した場合、preg_match() は FALSE を返します。

テキスト文字列「php」を検索します:

<?php
//模式分隔符后的"i"标记这是一个大小写不敏感的搜索
if (preg_match("/php/i", "PHP is the web scripting language of choice."))
{
echo "查找到匹配的字符串 php。";
} else {
echo "未发现匹配的字符串 php。";
} ?>

実行結果は次のとおりです:

查找到匹配的字符串 php。

単語「word」を検索

<?php
/* 模式中的\b标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配 * 单词的部分内容比如"webbing" 或 "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
echo "查找到匹配的字符串。\n";
} else {
echo "未发现匹配的字符串。\n";
}
if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
echo "查找到匹配的字符串。\n";
} else {
echo "未发现匹配的字符串。\n";
} ?>

実行結果は次のとおりです。

查找到匹配的字符串。
未发现匹配的字符串。

URL 内のドメイン名を取得します。

<?php
// 从URL中获取主机名称
preg_match(&#39;@^(?:http://)?([^/]+)@i&#39;, "http://www.runoob.com/index.html", $matches);
$host = $matches[1];
// 获取主机名称的后面两部分
preg_match(&#39;/[^.]+\.[^.]+$/&#39;, $host, $matches);
echo "domain name is: {$matches[0]}\n";
?>

実行結果は次のとおりです。

domain name is: runoob.com

c.preg_match_all () function

PHP 正規表現 (PCRE)

preg_match_all 関数は、グローバル正規表現マッチングを実行するために使用されます。

構文

int preg_match_all ( string $pattern , string $subject [, array &$matches [, int $flags = PREG_PATTERN_ORDER [, int $offset = 0 ]]] )

指定された正規表現パターンに一致する件名内のすべての一致結果を検索し、フラグで指定された順序で一致するものに出力します。

最初の一致が見つかった後、サブシーケンスは最後に一致した位置から検索を続けます。

パラメータの説明:

$pattern: 文字列形式の検索対象のパターン。

$subject: 入力文字列

$matches: 多次元配列、すべての一致結果を出力パラメータとして出力、配列のソートはフラグで指定されます。

$flags: 次のフラグと組み合わせて使用​​できます (PREG_PATTERN_ORDER と PREG_SET_ORDER は同時に使用できないことに注意してください):

PREG_PATTERN_ORDER: 結果は $matches[0] にソートされます] 完全なパターンのすべての一致を保存する場合は、$matches[ 1] 最初のサブグループのすべての一致を保存するなどです。

PREG_SET_ORDER: 結果は、$matches[0] には最初の一致からのすべての一致 (サブグループを含む) が含まれ、$matches[1] には 2 番目の一致からのすべての一致 (サブグループを含む) が含まれるように並べ替えられます。の上。

PREG_OFFSET_CAPTURE: このフラグが渡されると、見つかった各一致が、ターゲット文字列に対する相対的なオフセットを増加して返されます。

offset: 通常、検索は対象文字列の先頭から開始されます。オプションのパラメータ offset は、ターゲット文字列内の指定された位置から検索を開始するために使用されます (単位はバイト)。

戻り値

完全一致の数 (おそらく 0) を返します。エラーが発生した場合は FALSE を返します。

a4b561c25d9afb9ac8dc4d70affff419 タグと 0d36329ec37a2cc24d42c7229b69747a タグに一致するコンテンツを見つけます: (通常は $pat_array[1] を取得します)

<?php
$userinfo = "Name: <b>PHP</b> <br> Title: <b>Programming Language</b>";
preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array);
print_r($pat_array[0]);
?>

実行結果は次のとおりです 表示:

Array
(
    [0] => <b>PHP</b>
    [1] => <b>Programming Language</b>
)

d. preg_replace() 関数

preg_replace 関数は、正規表現の検索と置換を実行します。

構文

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

パターンに一致する件名の部分を検索し、置換に置き換えます。

パラメータの説明:

$pattern: 検索するパターン。文字列または文字列配列にすることができます。

$replacement: 置換に使用される文字列または文字列の配列。

$subject: 検索および置換されるターゲット文字列または文字列配列。

$limit: オプション。パターンごとの各サブジェクト文字列の置換の最大数。デフォルトは -1 (制限なし) です。

$count: 可选,为替换执行的次数。(用于统计被替换的次数)

返回值

如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。

如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL。

实例

将 google 替换为 runoob

<?php
$string = &#39;google 123, 456&#39;;
$pattern = &#39;/(\w+) (\d+), (\d+)/i&#39;;
$replacement = &#39;runoob ${2},$3&#39;;
echo preg_replace($pattern, $replacement, $string);
?>

执行结果如下所示:

runoob 123,456

删除空格字符

<?php
$str = &#39;runo o b&#39;;
$str = preg_replace(&#39;/\s+/&#39;, &#39;&#39;, $str);
// 将会改变为&#39;runoob&#39; echo $str;
?>

执行结果如下所示:

runoob

使用基于数组索引的搜索替换

<?php
$string = &#39;The quick brown fox jumped over the lazy dog.&#39;;
$patterns = array();
$patterns[0] = &#39;/quick/&#39;;
$patterns[1] = &#39;/brown/&#39;;
$patterns[2] = &#39;/fox/&#39;;
$replacements = array();
$replacements[2] = &#39;bear&#39;;
$replacements[1] = &#39;black&#39;;
$replacements[0] = &#39;slow&#39;;
echo preg_replace($patterns, $replacements, $string);
?>

执行结果如下所示:

The bear black slow jumped over the lazy dog.

使用参数 count

<?php
$count = 0;
echo preg_replace(array(&#39;/\d/&#39;, &#39;/\s/&#39;), &#39;*&#39;, &#39;xp 4 to&#39;, -1 , $count);
echo $count; //3
?>

执行结果如下所示:

xp***to
3

e.preg_split() 函数

preg_replace 函数通过一个正则表达式分隔字符串。

语法

array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )

通过一个正则表达式分隔给定字符串。

参数说明:

$pattern: 用于搜索的模式,字符串形式。

$subject: 输入字符串。

$limit: 可选,如果指定,将限制分隔得到的子串最多只有limit个,返回的最后一个 子串将包含所有剩余部分。limit值为-1, 0或null时都代表"不限制", 作为php的标准,你可以使用null跳过对flags的设置。

$flags: 可选,可以是任何下面标记的组合(以位或运算 | 组合):

PREG_SPLIT_NO_EMPTY: 如果这个标记被设置, preg_split() 将进返回分隔后的非空部分。

PREG_SPLIT_DELIM_CAPTURE: 如果这个标记设置了,用于分隔的模式中的括号表达式将被捕获并返回。

PREG_SPLIT_OFFSET_CAPTURE: 如果这个标记被设置, 对于每一个出现的匹配返回时将会附加字符串偏移量. 注意:这将会改变返回数组中的每一个元素, 使其每个元素成为一个由第0 个元素为分隔后的子串,第1个元素为该子串在subject 中的偏移量组成的数组。

返回值

返回一个使用 pattern 边界分隔 subject 后得到的子串组成的数组。

实例

获取搜索字符串的部分

<?php
//使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
print_r($keywords);
?>

执行结果如下所示:

Array
(
    [0] => hypertext
    [1] => language
    [2] => programming
)

将一个字符串分隔为组成它的字符

<?php
$str = &#39;runoob&#39;;
$chars = preg_split(&#39;//&#39;, $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>

执行结果如下所示:

Array
(
    [0] => r
    [1] => u
    [2] => n
    [3] => o
    [4] => o
    [5] => b
)

分隔一个字符串并获取每部分的偏移量

<?php
$str = &#39;hypertext language programming&#39;;
$chars = preg_split(&#39;/ /&#39;, $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
print_r($chars);
?>

执行结果如下所示:

Array
(
    [0] => Array
        (
            [0] => hypertext
            [1] => 0
        )

    [1] => Array
        (
            [0] => language
            [1] => 10
        )

    [2] => Array
        (
            [0] => programming
            [1] => 19
        )

)

3.常用正则(参考作用)

一、校验数字的表达式 

1 数字:
^[0-9]*$
2 n位的数字:
^\d{n}$
3 至少n位的数字:
^\d{n,}$
4 m-n位的数字:
^\d{m,n}$
5 零和非零开头的数字:
^(0|[1-9][0-9]*)$
6 非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 带1-2位小数的正数或负数:
^(\-)?\d+(\.\d{1,2})?$
8 正数、负数、和小数:
^(\-|\+)?\d+(\.\d+)?$
9 有两位小数的正实数:
^[0-9]+(.[0-9]{2})?$
10 有1~3位小数的正实数:
^[0-9]+(.[0-9]{1,3})?$
11 非零的正整数:
^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 非零的负整数:
^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
13 非负整数:
^\d+$ 或 ^[1-9]\d*|0$
14 非正整数:
^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非负浮点数:
^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮点数:
^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮点数:
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 负浮点数:
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮点数:
^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ 

二、校验字符的表达式

1 汉字:
^[\u4e00-\u9fa5]{0,}$
2 英文和数字:
^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 长度为3-20的所有字符:
^.{3,20}$
4 由26个英文字母组成的字符串:
^[A-Za-z]+$
5 由26个大写英文字母组成的字符串:
^[A-Z]+$
6 由26个小写英文字母组成的字符串:
^[a-z]+$
7 由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
8 由数字、26个英文字母或者下划线组成的字符串:
^\w+$ 或 ^\w{3,20}$
9 中文、英文、数字包括下划线:
^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、数字但不包括下划线等符号:
^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以输入含有^%&',;=?$\"等字符:
[^%&',;=?$\x22]+
12 禁止输入含有~的字符:
[^~\x22]+ 

三、特殊需求表达式 

1. メール アドレス:
^\w ([- .]\w )*@\w ([-.]\w )*\.\w ([-.]\w )*$
2、ドメイン名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a- zA -Z0-9]{0,62}) /.?
3 、インターネット URL:
[a-zA-z] ://[^\s]* または ^http://([\ w -] \.) [\w-] (/[\w-./?%&=]*)?$
4、携帯電話番号:
^(13[0-9]|14 [5 |7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d {8 }$
5、電話番号 ("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"、および "XXXXXXXX)":
^(\ (\ d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 国内電話番号 (0511-4405222、021-87888822):
\d{ 3} -\d{8}|\d{4}-\d{7}
7、ID 番号:
15 または 18 桁の ID 番号:
^\d{15}|\ d{ 18}$
15 桁の ID カード:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1] |2] \d)|3[0-1])\d{3}$
18 桁の ID カード:
^[1-9]\d{5}[1-9]\d {3}( (0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
8.短い ID 番号 (数字と文字 x で終わる):
^([0-9]){7,18}(x|X)?$
または
^\d{8,18} |[0- 9x]{8,18}|[0-9X]{8,18}?$
9. アカウントは合法ですか (文字で始まり、5 ~ 16 バイトが許可され、英数字のアンダースコアが許可されます):
^[ a-zA-Z][a-zA-Z0-9_]{4,15}$
10、パスワード (文字で始まり、長さは 6 ~ 18、文字と数字のみを含めることができます)およびアンダースコア):
^[a-zA-Z]\w{5,17}$
11、強力なパスワード (大文字、小文字、数字の組み合わせを含む必要があり、特殊文字は使用できません)長さは 8 ~ 10) :
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
12 . 日付形式:
^ \d{4}-\d{1,2}-\d{1,2}
13. 1 年の 12 か月 (01~09 および 1~12):
^(0?[ 1-9]|1[0-2])$
14、月の 31 日 (01 ~ 09 および 1 ~ 31):
^((0?[1 -9])|(( 1|2)[0-9])|30|31)$
15. お金の入力形式:
16. 1. 受け入れることができるお金の表現は 4 つあります。 : "10000.00" と "10,000.00 "、および "10000" と "10,000" ("cent" なし):
^[1-9][0-9]*$
17. 2. これは、次の数値を意味します。は 0 で始まりません。ただし、これは文字「0」が渡されないことも意味するため、次の形式を使用します:
^(0|[1-9][0-9]*)$
18、3. a 0 または 0 で始まらない数値。先頭に負符号を使用することもできます:
^(0|-?[1-9][0-9]*)$
19, 4. これは、0 または負の可能性があり、0 で始まらない数値を意味します。ユーザーは 0 から始めましょう。また、お金を負にすることはできないため、負の符号も削除します。次に追加する必要があるもの可能な小数部分を説明するためです:
^[0-9] (.[0-9] )?$
20, 5. 小数点の後に少なくとも 1 桁が必要であることに注意してください。したがって、「10.」は渡されませんが、「10」と「10.2」は渡されます:
^[0-9] (.[0-9]{2})?$
21. 6.このように、ビットの後に小数点以下 2 つが必要であると規定していますが、厳しすぎると思われる場合は、次のようにすることもできます:
^[0-9] (.[0-9]{1,2} )?$
22. 7. これにより、ユーザーは小数点以下 1 桁だけを書くことができます。次に、数値内のカンマを考慮する必要があります。これを行うことができます:
^[0-9]{1,3}(, [0-9]{3})*(.[0-9] {1,2})?$
23、8.1 ~ 3 個の数値、その後に任意の数のカンマと 3 個の数値が続き、代わりにカンマはオプションになります必須のうち:
^([0-9] |[0 -9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2}) ?$
24. 注: これは最終結果です。空の文字列が受け入れられると思われる場合は、「 」を「*」に置き換えることができることを忘れないでください (奇妙です、なぜですか?) 最後に、次のことを忘れないでください。関数を使用するときはバックスラッシュを削除してください。よくある間違いはここです
25、xml ファイル:
^([a-zA-Z] -?) [a-zA-Z0-9] \\.[x| X][m|M][l|L]$
26. 漢字の正規表現:
[\u4e00-\u9fa5]
27. 全角文字:
[^\ x00-\xff]
(中国語の文字を含む) は、文字列の長さを計算するために使用できます (全角文字の長さは 2 としてカウントされ、ASCII 文字の長さは 1 としてカウントされます)。 )
28. 空白行の正規表現: \n\s*\r (空白行の削除に使用可能)
29、HTML タグの正規表現:
77fd8bc7bdd69d559641343c5e741fc7]*>.*?c0f8603dd44f0db5dcc943cf687721b3|<.*? /> ; (インターネット上で流通しているバージョンはあまりにもひどいものです。上記のものは部分的にしか効果がなく、複雑なコードにはまだ無力ですネストされたタグ)
30. 先頭および末尾の空白文字の正規表現: ^\s*|\s*$ または (^ \s*)|(\s*$) (空白文字を削除するために使用できます)行の先頭と末尾 (スペース、タブ、フォーム フィードなどを含む)、非常に便利な表現)
31、Tencent QQ 番号: [1-9][0-9]{4,} (Tencent QQ番号は 10000 から始まります)
32、中国の郵便番号: [1-9]\d{5}(?!\d) (中国の郵便番号は 6 桁です)
33。IP アドレス: \d \。 \d \.\d \.\d (IP アドレスを抽出するときに役立ちます)

以上がPHP規則性の内容概要(詳細)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。