1. preg_match()
関数プロトタイプ: int preg_match (string $pattern, string $content [, array $matches])
preg_match () 関数は、$contentstring 内の $pattern で指定された 正規表現を検索します。 $matches が指定されている場合、一致する結果がそこに配置されます。 $matches[0] にはパターン全体に一致するテキストが含まれ、$matches[1] には括弧で囲まれたパターン要素の最初にキャプチャされた一致が含まれます。この関数は 1 つの一致のみを実行し、最終的に一致結果の数 0 または 1 を返します。リスト 6.1 は、preg_match() 関数のコード例を示しています。 コード 6.1 日付と時刻のマッチング
コードは次のとおりです:
<?php //需要匹配的字符串。date函数返回当前时间 $content = "Current date and time is ".date("Y-m-d h:i a").", we are learning PHP together."; //使用通常的方法匹配时间 if (preg_match ("//d{4}-/d{2}-/d{2} /d{2}:/d{2} [ap]m/", $content, $m)) { echo "匹配的时间是:" .$m[0]. "/n"; } //由于时间的模式明显,也可以简单的匹配 if (preg_match ("/([/d-]{10}) ([/d:]{5} [ap]m)/", $content, $m)) { echo "当前日期是:" .$m[1]. "/n"; echo "当前时间是:" .$m[2]. "/n"; } ?>
一致時刻は: 2016-08-17 01:25 pm
現在の日付は: 2016-08-17
現在の時刻は: 01:25 pm
2. ereg() と eregi()
コード 6.2 ファイル名のセキュリティチェック
コードは次のとおりです:
<?php $username = $_SERVER['REMOTE_USER']; $filename = $_GET['file']; //对文件名进行过滤,以保证系统安全 if (!ereg('^[^./][^/]*$', $userfile)) { die('这不是一个非法的文件名!'); } //对用户名进行过滤 if (!ereg('^[^./][^/]*$', $username)) { die('这不是一个无效的用户名'); } //通过安全过滤,拼合文件路径 $thefile = "/home/$username/$filename"; ?>
1. ereg_replace() と eregi_replace()
string eregi_replace (string $pattern, string $replacement, string $string)
ereg_replace() in $string 内のパターン文字列 $pattern を検索し、一致した結果を $replacement に置き換えます。 $pattern にパターン ユニット (またはサブパターン) が含まれている場合、「/1」や「$1」などの $replacement 内の位置は、これらのサブパターンに一致するコンテンツに置き換えられます。また、「/0」または「$0」は、一致する文字列全体の内容を指します。バックスラッシュは二重引用符内のエスケープ文字として使用されるため、「//0」および「//1」の形式を使用する必要があることに注意してください。
eregi_replace() と ereg_replace() は、前者が大文字と小文字を区別しないことを除いて、同じ機能を持ちます。コード 6.6 は、この関数の応用例です。このコードは、プログラムのソース コードに対して簡単なクリーニング作業を行う方法を示しています。
コード 6.6 ソース コードのクリーンアップ
コードは次のとおりです:
<?php $lines = file('source.php'); //将文件读入数组中 for($i=0; $i<count($lines); $i++) { //将行末以“//”或“#”开头的注释去掉 $lines[$i] = eregi_replace("(////|#).*$", "", $lines[$i]); //将行末的空白消除 $lines[$i] = eregi_replace("[ /n/r/t/v/f]*$", "/r/n", $lines[$i]); } //整理后输出到页面 echo htmlspecialchars(join("",$lines)); ?>
2. preg_replace()
preg_replace は ereg_replace よりも強力です。最初の 3 つのパラメータはすべて配列を使用でき、4 番目のパラメータ $limit は置換数を設定でき、デフォルトではすべて置換されます。コード6.7は配列置換の応用例です。
コード6.7 配列置換
コードは以下の通りです:
<?php //字符串 $string = "Name: {Name}<br>/nEmail: {Email}<br>/nAddress: {Address}<br>/n"; //模式 $patterns =array( "/{Address}/", "/{Name}/", "/{Email}/" ); //替换字串 $replacements = array ( "No.5, Wilson St., New York, U.S.A", "Thomas Ching", "tom@emailaddress.com", ); //输出模式替换结果 print preg_replace($patterns, $replacements, $string); ?>
Name: Thomas Ching", Email: tom@emailaddress.com Address: No.5, Wilson St., New York, U.S.A
コードは次のとおりです:
<?php $html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; //输出结果中HTML标签将全部为小写字母 echo preg_replace ( "/(<//?)(/w+)([^>]*>)/e", "'//1'.strtolower('//2').'//3'", //此处的模式变量//2将被strtolower转换为小写字符 $html_body); ?>
preg_replace 関数は Perl 互換の正規表現構文を使用し、通常は ereg_replace のより高速な代替関数です。文字列の単純な置換のみを実行したい場合は、
str_replace 関数を使用できます。
以上がPHP でよく使用される正規表現関数の例のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。