ホームページ  >  記事  >  バックエンド開発  >  PHP でよく使用される正規表現関数の例のまとめ

PHP でよく使用される正規表現関数の例のまとめ

伊谢尔伦
伊谢尔伦オリジナル
2017-06-27 11:34:241301ブラウズ

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年8月17日13時25分」であるとすると、以下の内容が出力されます。

一致時刻は: 2016-08-17 01:25 pm
現在の日付は: 2016-08-17
現在の時刻は: 01:25 pm

2. ereg() と eregi()

ereg() は、POSIX 拡張ライブラリの正規表現のマッチング関数です。 eregi() は、ereg() 関数の大文字と小文字を無視するバージョンです。どちらも preg_match と同様の関数を持っていますが、この関数は一致が成功したかどうかを示すブール値を返します。 POSIX 拡張ライブラリ関数の最初のパラメータは正規表現文字列を受け入れる、つまり区切り文字は必要ないことに注意してください。たとえば、リスト 6.2 はファイル名のセキュリティをチェックする方法です。

コード 6.2 ファイル名のセキュリティチェック
コードは次のとおりです:

<?php 
$username = $_SERVER[&#39;REMOTE_USER&#39;]; 
$filename = $_GET[&#39;file&#39;]; 
//对文件名进行过滤,以保证系统安全 
if (!ereg(&#39;^[^./][^/]*$&#39;, $userfile)) 
{ 
die(&#39;这不是一个非法的文件名!&#39;); 
} 
//对用户名进行过滤 
if (!ereg(&#39;^[^./][^/]*$&#39;, $username)) 
{ 
die(&#39;这不是一个无效的用户名&#39;); 
} 
//通过安全过滤,拼合文件路径 
$thefile = "/home/$username/$filename"; 
?>

通常、Perl 互換の正規表現マッチング関数 perg_match() を使用すると、ereg() や eregi() を使用するより高速になります。文字列に特定の部分文字列が含まれているかどうかだけを確認したい場合は、strstr() 関数または strpos() 関数を使用することをお勧めします。

正規表現の置換

1. ereg_replace() と eregi_replace()

関数プロトタイプ: string ereg_replace (string $pattern, string $replacement, string $string)

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(&#39;source.php&#39;); //将文件读入数组中 
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()

関数プロトタイプ:mixed preg_replace (mixed $pattern,mixed $replacement,mixed $subject [, int $limit])

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

preg_replaceの正規表現ではパターン修飾子「e」が使用できます。その機能は、一致結果を式として使用することであり、再操作できます。例:

コードは次のとおりです:

<?php 
$html_body = “<HTML><Body><H1>TEST</H1>My Picture<Img src=”my.gif”></Body></HTML>”; 
//输出结果中HTML标签将全部为小写字母 
echo preg_replace ( 
"/(<//?)(/w+)([^>]*>)/e", 
"&#39;//1&#39;.strtolower(&#39;//2&#39;).&#39;//3&#39;", //此处的模式变量//2将被strtolower转换为小写字符 
$html_body); 
?>

ヒント

preg_replace 関数は Perl 互換の正規表現構文を使用し、通常は ereg_replace のより高速な代替関数です。文字列の単純な置換のみを実行したい場合は、
str_replace 関数を使用できます。

以上がPHP でよく使用される正規表現関数の例のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。