Apache+PHPによる+PostgreSQLによるWebアプリケーション
−入門編−
第4章 PHP入門
前へ | 目次へ |次へ

4.11 正規表現関数

 正規表現パターンを用いた検索や置換はデータベースを利用したWebアプリケーションではよく使います。PHPでは、そのために正規表現パターンを用いて処理する正規表現関数が準備されています。

 正規表現検索で使用する関数には、preg_match関数、preg_match_all関数、preg_grep関数があります。

 正規表現検索・置換で使用する関数には、preg_replace関数があります。

 正規表現パターンを用いた文字列の分割に使用する関数には、preg_split関数があります。

■preg_match()

 対象文字列の中にパターン文字列にマッチするものがあるかないかをチェックするにはpreg_match関数を使用します。preg_match関数の書式は次のとおりです。

preg_match(パターン文字列, 対象文字列)

 サンプルのリストを4.55に示します。アクセス結果を図4.57に示します。

リスト4.55 preg_match.php

<html>
<head>
<title>preg_match.php</title>
</head>
<body>
<?php
// preg_match関数
 $str = "WEB means a server system using world wide web technology.";
                                  //
 if( preg_match( "/\bweb\b/" , $str ) ) {         // preg_match関数の呼び出し
    print "マッチしました";
 } else {
    print "マッチしません";
 }
?>
</body>
</html>


図4.57

 preg_mach関数では、マッチの有無だけでなく、マッチした文字列を格納することができます。その場合は次の書式のように第3引数にマッチした文字列を格納する配列変数を渡します。

preg_match(パターン文字列, 対象文字列, 格納配列)

 サンプルのリストを4.56に示します。アクセス結果を図4.58に示します。

リスト4.56 preg_match2.php

<html>
<head>
<title>preg_match2.php</title>
</head>
<body>
<?php
// preg_match関数:マッチした文字列の格納
 $str = "WEB means a server system using world wide web technology.";
                                 //
 if( preg_match( "/\bweb\b/" , $str, $arr_str ) ) {  // マッチした文字列を
                                          $arr_strに格納
 
  print "マッチしました->";
   print $arr_str[0];                    /*マッチした文字列を出力
                                   配列キー0を指定する */
 } else {
   print "マッチしません";
 }
?>
</body>
</html>


図4.58

■preg_match_all

 preg_match_all関数では、指定されたパターンにマッチしたすべての文字列を格納します。書式は次の通りです。

preg_match_all( パターン文字列, 対象文字列, 格納配列 )

 サンプルのリストを4.57に示します。アクセス結果を図4.59に示します。この例ではパターン修飾子として「i」を付加し、大文字と小文字を区別しません。その結果、「WEB」と「web」がマッチします。

リスト4.57 preg_match_all.php

<html>
<head>
<title>preg_match_all.php</title>
</head>
<body>
<?php
// preg_match_all関数:マッチしたすべての文字列の格納
 $str = "WEB means a server system using world wide web technology.";
 preg_match_all( "/\bweb\b/i" , $str, $arr_str );
                               /* preg_match_all関数の呼び出し
                                 パターン修飾子「i」を使用 */
 foreach( $arr_str[0] as $val ) {            // キー0を指定
   print $val . "<br>";
 }
?>
</body>
</html>


図4.59

■preg_grep

 preg_grep関数は、配列内の各値に対してマッチングを行います。パターンにマッチする値のみを取り出して新しい配列を作ります。サンプルをリストを4.58に示します。アクセス結果を図4.60に示します。

リスト4.58 preg_grep.php

<html>
<head>
<title>preg_grep.php</title>
</head>
<body>
<?php
// preg_grep関数
 $arr_str = array ( "123","456xyz", "abc", "deFG","abc\n");
 $arr_res = preg_grep( "/^[a-z]+$/i", $arr_str );
                               /* 文字列パターン
                                       /^[a-z]+$/iの検索 */

 foreach ( $arr_res as $val ) {
   print $val . "<br>";
 }
?>
</body>
</html>


図4.60

preg_rplace

 preg_rplace関数は、マッチした文字列を別の文字列に置き換えます。preg_rplace関数は次の書式で使用します。

preg_rplace( パターン文字列、置換文字列、対照文字列 )

 サンプルをリストを4.59に示します。アクセス結果を図4.61に示します。

リスト4.59 

<html>
<head>
<title>preg_replace.php</title>
</head>
<body>
<?php
// preg_replace関数:文字列の置換
 $str = "Homepages is written by HTML Language.";
 $str_res = preg_replace( "/\bhomepages\b/i" , "webpages", $str );
                                 // preg_replace関数の呼び出し
 print $str_res . "<br>";
?>
</body>
</html>


図4.61

 preg_rplace関数では、同時に複数のパターン文字列の置換ができます。その場合は、パターン文字列と置換文字列は配列で渡します。サンプルをリストを4.60に示します。アクセス結果を図4.62に示します。

リスト4.60

<html>
<head>
<title>preg_replace2.php</title>
</head>
<body>
<?php
// preg_replace関数:複数パターン文字列の置換
 $str = "Homepages is written by HTML Language.";
 $pattern = array("/\bhomepages\b/i", "/\bhtml\b/i");
 $replace = array("webpages", "XML");
 $str_res = preg_replace( $pattern , $replace, $str );
                                 // 複数の置換処理を配列で指定
 print $str_res . "<br>";
?>
</body>
</html>


図4.62

preg_split

 preg_split関数は、対象の文字列を指定した正規表現にマッチする部分で分割します。preg_splitの書式は次の通りです。戻り値は配列で、分割された部分文字列が要素として格納されます。

preg_split( 正規表現, 対象文字列 )

 サンプルをリストを4.61に示します。アクセス結果を図4.63に示します。

リスト4.61 preg_split.php

<html>
<head>
<title>preg_split.php</title>
</head>
<body>
<?php
// preg_split関数:文字列の分割
 $str = "/usr/local/apache/htdocs/php";
 $str_res = preg_split( "/\//" , $str );      /* preg_split関数の呼び出し
                               「/」で分割 */
 foreach( $str_res as $val ){
   print $val . "<br>";
 }
?>
</body>
</html>


図4.63

 


前へ | 目次へ |次へ | YCポータルサイト

執筆 山田豊通
更新日:2003年6月4日