1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
/* -----------------------------------------
 *       正規表現のpreg_replaceの例2
 *   後方参照:URLをlinkタグ変換、添字配列と複数値の置換、配列パターンのマッチ数
 *
 *  作成: 2015.07.23 yoshi of CXMedia Inc.
 * ------------------------------------------ */
header("Content-type: text/plain; charset=UTF-8");

// ----後方参照:URLをlinkタグに変換
$url   "http://www.cgweb.com:8080";
$check '{(https?|ftp|news)(://[[:alnum:]+$;?.%,!#~*/:@&=_-]+)}i';
$link  preg_replace($check,"<a href=\"$1$2\">$1$2</a>",$url);
echo 
"--後方参照:URLをlinkタグ変換--\n",$link,"\n";

// ---後方参照:数字リテラルが後に続く区別{}利用→${1}
$string      'April 15, 2003';
$pattern     '/(\w+) (\d+), (\d+)/i';
// $1の後に数字リテラル'9'があるため、数字の範囲を区別するため、${1}とする
$replacement '${1}9,$3';
echo 
"--後方参照:数字リテラルが後に続く区別{}利用→\${1}--\n",
              
preg_replace($pattern$replacement$string),"\n";

// ---添字配列の使用
$string       'The quick brown fox jumped over the lazy dog.';
$patterns     = array('/quick/','/brown/','/fox/');
$replacements = array('slow','black','bear');
echo 
"--添字配列の使用--\n",preg_replace($patterns$replacements$string),"\n";

// ---複数値の置換
$patterns = array (
    
'/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
    
'/^\s*{(\w+)}\s*=/'
);
$replace = array (
    
'\3/\4/\1\2',
    
'$\1 ='
);
echo 
"--複数値の置換--\n",preg_replace($patterns$replace'{startDate} = 1999-5-27'),"\n";

// -----'e' 修飾子の使用:入力テキストのすべての HTML タグを大文字に変換
$html_body = <<<_EOL_
<body>
<form>
<h1 class="abc">ログイン</h1>
<p>ユーザーIDとパスワードを入力してください。</p>
</form>
</body>
</html>
_EOL_;
$out preg_replace("/(<\/?)(\w+)([^>]*>)/e","'\\1'.strtoupper('\\2').'\\3'",$html_body);
echo 
"--HTMLタグを大文字に変換--\n",$out,"\n";

// --- 複数空白を1個の空白に置換
$str 'foo   o';
$str preg_replace('/\s+/'' '$str);
echo 
"--1個の空白に置換--\n",$str,"\n";

// ---配列パターンでマッチ数、count引数の使用
$count 0;
echo 
"--配列パターンでマッチ数をcountにセット--\n",
        
preg_replace(array('/\d/','/\s/'), '*''xp 4 to', -$count),"\n";

echo 
"--count引数のマッチ数--\n",$count,"\n";
?>