|
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
|