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', -1 , $count),"\n";
echo "--count引数のマッチ数--\n",$count,"\n";
?>