|
U 遅延モード (デフォルトの貪欲モードは記述しないでください)
2. 一般的に使用される PHP の通常の関数と例
a. preg_grep() 関数
preg_grep 関数は、パターンに一致する配列エントリを返します。
構文
array preg_grep ( string $pattern , array $input [, int $flags = 0 ] )
パターン 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('@^(?:http://)?([^/]+)@i', "http://www.runoob.com/index.html", $matches);
$host = $matches[1];
// 获取主机名称的后面两部分
preg_match('/[^.]+\.[^.]+$/', $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 = 'google 123, 456';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = 'runoob ${2},$3';
echo preg_replace($pattern, $replacement, $string);
?>
执行结果如下所示:
runoob 123,456
删除空格字符
<?php
$str = 'runo o b';
$str = preg_replace('/\s+/', '', $str);
// 将会改变为'runoob' echo $str;
?>
执行结果如下所示:
runoob
使用基于数组索引的搜索替换
<?php
$string = 'The quick brown fox jumped over the lazy dog.';
$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, $replacements, $string);
?>
执行结果如下所示:
The bear black slow jumped over the lazy dog.
使用参数 count
<?php
$count = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -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 = 'runoob';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($chars);
?>
执行结果如下所示:
Array
(
[0] => r
[1] => u
[2] => n
[3] => o
[4] => o
[5] => b
)
分隔一个字符串并获取每部分的偏移量
<?php
$str = 'hypertext language programming';
$chars = preg_split('/ /', $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 アドレスを抽出するときに役立ちます)